1樓:
不對,C++中定義的陣列,在記憶體分配上都是分配一塊連續的記憶體來儲存的,這個是不用懷疑的。
問題分析:
C++中,陣列在記憶體中的分配有靜態分配和動態分配兩種。靜態陣列建立的方式為:A a,它在棧上分配空間;動態陣列建立的方式是使用new 或 malloc在堆上分配。
靜態分配
intarr[10
];intarr
=;動態分配
//一維陣列
int*
arr=
(int*)
malloc
(sizeof
(int)*
size
);//row 和 col 可以由使用者輸入
int**
array=(
int**
)malloc
(sizeof
(int)*
row);
for(i=
0;i )array[i ]=(int*) malloc (sizeof (int)* col); 靜態分配時,資料儲存在棧(函式中使用陣列)上或靜態儲存區(全域性陣列);動態分配時,資料儲存在堆上。C++中,在函式(包括main函式)中,記憶體為棧所分配的最大空間為4M,當然不同系統有可能不同。 你在程式中定義的是全域性陣列,陣列容量是相當龐大,很可能是儲存區溢位了,也就是說沒有找到這樣一塊連續的記憶體區域來儲存這些資料,從而用lower-bound()操作時出錯。你可以試著減少資料量來試一下是否恢復正常。 解決方法: 1.可以採用多個陣列vector的方式來分別定義進行儲存。示例如下: vector >vec0 ;vector >vec1 ;vector vec2 ;vector >vec3 ;//注意max_size()函式返回的是vector容器最大能存放的元素的個數,並不是位元組數 cout < .max_size ()<< endl ;cout < .max_size ()<< endl ;cout < .max_size ()<< endl ;cout < .max_size ()<< endl ;在程式執行完之後得到的資料如下(win7系統 64位 VS2010下): vec0 時為4294967295,即4G個元素 vec1 時為134217727,即128M個元素 vec2 時為1073741823,即1G個元素 vec3 時為536870911,即512M個元素 注意:雖然上面顯示了可以存放這麼多數量的元素個數,但是一般情況下並不會真的讓你存放這麼多的資料。 2.可以使用list鍊表來實現,鍊表儲存是非連續的。例如可以用list arr;這種方式儲存資料,只要記憶體滿足,都是可以儲存的。 按照 C 的寫法應該是 int p 4 但是既然是用 C 最好的方法還是用模板容器 using arr type std vector array 4 arr typep1 arr typep2 arr typep3 arr typep4 arr typep5 然後想要拷貝 std vector p... d41d8c 結構體的拷貝建構函式中,陣列可以拷貝。lambda的拷貝捕獲可以捕獲陣列 int a 2 a structured binding也可以產生陣列的拷貝 int a 2 auto x,y a 中,x和y繫結到a的副本中的元素。甚至char a asdf 這種初始化也可以看作陣列拷貝的特例... 陌歸 a i 代表一維陣列中下標為i的元素。假如你定義了乙個a 5 呼叫的時候用的a 5 是越界訪問的下標為5的元素 因為事實上陣列a 5 的下標值只到4 不是整個陣列。只有在定義的時候a代表陣列。 薛非 先定義int ages 5 或int ages 再乙個乙個賦值是可以的,這不可能。請如實描述問...C 中如何建立乙個不定長陣列的陣列指標?
為什麼c 中陣列不能直接拷貝給另一陣列?
C語言陣列定義時不初始化為什麼會報錯?