C 如何定義長度超過一百萬的陣列

2021-08-16 03:10:28 字數 2720 閱讀 7268

1樓:

你這個陣列申明在函式內部,屬於區域性變數,存放在了棧上,看看陣列佔用的記憶體大小:1000000=1000*1000然後乘以int型資料長度

1000*1000*4byte約等於4m,而棧的預設記憶體空間為1m左右,所以會導致記憶體溢位解決這個問題,可以將陣列申明在全域性儲存區或堆上即可方法一:申明為全域性變數

#include

#include

using namespace std;

int list[1000000];//全域性變數int main(){

int a,b;

cin>>a;

for(b=0;b>list[b];

sort(list,list+a);

for(b=0;b

方法二:存放在堆上

#include

#include

using namespace std;

int main(){

int a,b,*list;

//int list[1000000];

list = new int[1000000];//存放在堆上cin>>a;

for(b=0;b>list[b];

sort(list,list+a);

for(b=0;b

2樓:飛塵

陣列申明在函式內部,屬於區域性變數,存放在了棧上,看看陣列佔用的記憶體大小:1000000=1000*1000然後乘以int型資料長度

1000*1000*4byte約等於4m,而棧的預設記憶體空間為1m左右,所以會導致記憶體溢位解決這個問題,可以將陣列申明在全域性儲存區或堆上即可方法一:申明為全域性變數

方法二:存放在堆上

3樓:匿名使用者

100w *4 大概是4m的樣子.

函式內定義陣列,是在函式堆疊分配空間,一般函式堆疊限制了最大1m的樣子.

這個值我不確定,具體得查資料.

如果是這樣的話,4m的陣列是不可以直接定義的。

不過建立執行緒的時候,可以設定堆疊大小,可以試試直接設定函式堆疊大小沒用過,不知道是否可以.

其實你可以用malloc分配一塊同樣大小的記憶體,效果跟陣列一樣.

4樓:

調編譯器快取大小,或者往硬碟讀寫,或者對映。

5樓:匿名使用者

全域性變數陣列不會報錯

6樓:

分組 把100萬分為多組

c++裡怎麼定義一個不知道大小的陣列

7樓:

沒分也幫你,哥是好人,呵呵

在c++中實現變長陣列

1.變長一維陣列

這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做:

//檔名: array01.cpp

#include

using namespace std;

int main()

注意int *p=new int[len];這一句,你不能這樣做:

int p[len];

c++編譯器會報錯說len的大小不能確定,因為用這種形式宣告陣列,陣列的大小需要在編譯時確定。而且這樣也不行:

int p=new int[len];

編譯器會說不能把int*型轉化為int型,因為用new開闢了一段記憶體空間後會返回這段記憶體的首地址,所以要把這個地址賦給一個指標,所以要用int *p=new int[len];

array01.cpp實現了一個變長的一維陣列,但是要養成一個好習慣,就是注意要登出指標p,使程式釋放用new開闢的記憶體空間。

當然使用c++標準模版庫(stl)中的vector(向量)也可以實現變長陣列:

//檔名: array02.cpp

#include

#include

using namespace std;

int main()

cout<

}return 0;

}執行結果:

input value for m,n,l:2 3 4

0: 00492fe0 1: 00492fe4 2: 00492fe8 3: 00492fec

1: 00492fa0 2: 00492fa4 3: 00492fa8 4: 00492fac

2: 00492f60 3: 00492f64 4: 00492f68 5: 00492f6c

1: 00492ec0 2: 00492ec4 3: 00492ec8 4: 00492ecc

2: 00492e80 3: 00492e84 4: 00492e88 5: 00492e8c

3: 00492e40 4: 00492e44 5: 00492e48 6: 00492e4c

8樓:匿名使用者

使用 new 動態建立陣列

C 動態增加陣列長度,c 動態定義陣列長度

1.你可以設立一個指標intpointer 指標和陣列本來就是一家人 int intpointer 然後當取得了i的值後用 intpointer int malloc i sizeof int int main 用new 陣列長度給定後。如果想增加。只能重新分配空間。儲存元素,然後在進行刪除 用re...

c語言中如何定義陣列C語言中如何定義陣列

c語言中,同變數一樣 陣列也必須先定義後使用。一維陣列的定義形式 型別識別符號 陣列名 常量表示式 例如int a 10 其中a為地址常量。如變數的定義一樣,int a double a float a等 陣列的定義只是把後面的變數名改為陣列名而已。int a 10 就是定義了一個陣列名為a的陣列 ...

在C 中如何給字串陣列定義長度呢

在c 中給字串 陣列 定義長度時,首先要先確定待儲存的資料的最大可能長度,根據該長度進行陣列長度定義,其次,要記著字串是有結束符位置的,所以,在資料長度基礎上,要給字串結束符留個位置。如,題目要求 輸入資料不超過100個字元長度。則變數定義為 char data 100 1 建議寫成 1這樣,表示有...