c 動態記憶體分配一維陣列,C 動態建立一個一維陣列 ,賦值 並顯示每個元素的值,最後釋放記憶體

2022-02-06 19:05:43 字數 3993 閱讀 3876

1樓:匿名使用者

你的兩個疑問:

1、分配記憶體大小如何確定

2、動態分配記憶體後初始值是啥東西

給你一個簡單的解決方案例子:

1、定義一個函式,兩個引數,引數1(指向記憶體的指標),引數2(記憶體的大小)

2、為你分配的記憶體做初始化消除不確定性

2樓:c小燦

之所以要用到動態記憶體分配,是你一開始不知道要分配多大的記憶體空間,但最後要分配的時候一定是知道要分配多大的空間的,否則如果到最後要用到這個儲存空間也就是你這裡指的陣列的時候,你都不知道要有多大的空間,那麼動態分配記憶體也就沒什麼意義,還不如一開始就定一個足夠大的陣列。

這裡舉一個動態記憶體分配的簡單應用例子,比如你是個酒店管理員,負責對接旅行團的入住管理,旅行團的人數都不一樣,但最後真的有旅行團來的時候就會報出人數,這時候你就知道要分配多少個房間給他們,然後你要把這個旅行團的房間號記下來,這時候就可以用動態分配了,簡單示例程式如下:

/**功能說明,錄入房間號,輸入第幾個人(簡單點模擬人名),查詢房間號

*/#include

#include

using namespace std;

#define max_human_count 100 //最大可入住人數

int main()

else

/*輸入第幾個人,查詢房間號*/

cout << "you can get the room num by input the index:1~" << human_num << ":";

cin >> room_num;

cout << "the room num of index " << room_num << " is " << room[human_num-1] << endl;

delete room;//最後注意一定要**動態分配的記憶體

}return 0;}

3樓:帥的人正在使用

首先引入標頭檔案include

然後建立動態陣列 vectorvec ;

寫入資料 vec.push_back(....)拿到資料 可以通過迴圈編輯 vec[i]也可以每次拿到頭第一個 vec.front()歡迎追問,望採納

4樓:人人順風順水

暈,如果什麼都搞不定就學一學用vector

c++ 怎麼讓陣列動態的分配記憶體來儲存.?

5樓:匿名使用者

首先對於你的問題明確一下:

第一:你是說自己寫一個動態分配的資料麼?如果是那樣的話,你使用c中malloc和realloc,然後使用free釋放,方法一樓已經說過,不多說了;

你也可以使用c++中的new和delete,new和malloc基本差不多,但是new和delete是c++中的,對用類使用的話,new會呼叫類的預設建構函式,delete會呼叫類的解構函式,malloc和free不具上述功能。

第二:如果你說的是動代陣列的話,c++標準庫,也就是stl中有,陣列是vector,連結串列是list

vector和list都是自動增長的,也就是自動分配記憶體的,不用你管,只管使用即可,對於vector和list的實現,是由標準庫的牛人實現的,就如同呼叫c中的abs函式一樣,abs是c標準庫中的函式,實現也是有標準庫的大牛實現的,我們只管使用;對於stl的原理有很多書講解,如果有興趣可以看看相關書籍,比如:《c++ 標準程式庫》、侯捷同學的《stl原始碼剖析》等,如果瞭解標準庫的使用的話,《c++ primer》等很多書籍中也都有講解;

對於vector簡單介紹兩句吧:vector 使用的了c++中的模版機制,定義了一套對應的介面函式進行操作;

例如定義一個放置unsigned int型別的陣列:

#include

typedef std::vector< unsigned int > uintarray;

uintarray m_arraya;

迴圈從陣列最後新增10個元素:

unsigned int untmp, uncount = 0;

for( untmp = 0; untmp < uncount ; untmp++ )

刪除所有元素:

m_array.clear();

還有很多函式,以及iterator。

不知道我回答的是不是你問的,不過希望你以後提問題,描述清楚一些,讓解答人能明確你的問題!

6樓:匿名使用者

1、使用malloc函式,先分配第一維的大小,然後再迴圈分配每一維的大小。

2、例程,分配3行4列二維陣列:

#include

#include

int main()

//初始化

for (i = 0; i < 3; ++i)}//輸出測試

for (i = 0; i < 3; ++i)printf ("\n");

}//釋放動態開闢的空間

for (i = 0; i < 3; ++i)free(a);

return 0;}/*

輸出:0 1 2 3

1 2 3 4

2 3 4 5*/

7樓:融斯力穎慧

假設你的資料時int型的。

int*p

=null;

intn;scanf("%d",&n);p=

malloc(n,

sizeof(int));

//這樣分配了n個int型資料的空間,並且p指向空間首地址排序那個就自己採用一種排序方法吧。操作p可以說是跟操作一個陣列一樣的p[0]就是第一個元素。p[n-1]就是陣列最後一個元素。。

最後呼叫free(p)釋放掉申請的記憶體

8樓:匿名使用者

陣列的大小,c與c++應當都是固定的。

只不過指標可以用malloc和realloc進行擴容。

如int *p=(int *)malloc(10*sizeof(int));

p=(int *)realloc(1000*sizeof(int));

9樓:

c語言中陣列也一樣可以通過動態分配得到

用malloc(個數*sizeof( ))calloc(個數,sizeof( ))都可以

10樓:匿名使用者

int *ary=null, *pa;

int n;

pa=new int [n];

這樣就可以了

11樓:匿名使用者

t;>n;

int **arr = new int*[m];

for(int i=0; i

c++在一個物件中動態分配一個很大的陣列會提示記憶體分配失敗,那我可以提高給物件分配的記憶體空間嗎?

12樓:匿名使用者

windows 32位程式,使用者地址空間只有2gb,而且由於地址分配的碎片化,你要想分配一個連續的1gb地址都難,512mb有時候都只能申請一次就沒法成功了。

有兩種方法:

1、使用awe機制來訪問記憶體,這個可以超過32位程式的2g地址空間限制,建議採用此方法。

2、申請多個128mb的buffer,組成你需要的大記憶體段

13樓:匿名使用者

c++ new出來的物理、邏輯記憶體都是連續的,如果一次申請很大的記憶體,可能會失敗,不是沒有記憶體,而是沒有那麼大的記憶體;

建議改用連結串列,這樣避免空閒記憶體塊不夠大;

另外在有些unix系統中,10個1m記憶體和1個10m記憶體釋放速度不一樣;

建議不要一次申請一個很大記憶體。

c++動態建立一個一維陣列 ,賦值 並顯示每個元素的值,最後釋放記憶體

14樓:it孤鶩

#include

using namespace std;

void main()

C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new

這樣是會有記憶體洩漏的,因為第一次執行s new stu 後,系統申請了一塊新的記憶體空間 型別為stu 並把其地址賦給s 第2此執行s new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了 而delete s 只是把...

C 題 關於動態儲存分配,下列說法正確的是

選項a,錯,new 與delete是用於動態平衡分配與釋放空間的運算子,不是函式 選項b,對,如int p new int 5 選項c,錯,要使用delete釋放空間,系統會統一管理,而不用delete釋放的空間,會造成記憶體洩漏,這種程式用的次數多,會造成記憶體耗盡 選項d,錯,不成功,會返回0。...

c如何宣告二維陣列,c 如何宣告一個二維陣列?

static void main string args for i 2 i 10 i for i 0 i 10 i a i,j console.writeline console.readline string fn new string 12 fn 0 new string fn 1 new s...