2010-06-23 36 views
2

我正在使用GCC +終端製作一組素數。用24 +位索引數組在macbook pro上得到段錯誤

我曾經問過上#[email protected],但我還是不明白:

int可以存儲32位的值(因此總共2^32個的唯一值),但不能有一個數組超過2^24的值?

我不確定,但是Why 24 bits registers?已經回答了我的問題?

這是否意味着製作一個long int的數組不能解決問題?是否有一些(比例較快)的方式可以繞過這個問題,比如使用int[][]來存儲這些數字?或者也許包含或lib使用任意數量的字節來存儲數字?



    int main() 
    { 
     int array1[160000]; 
     printf("first array declared fine.\n"); 
     int array2[170000]; 

     int array3[1600000]; 
     printf("first array declared fine.\n"); 
     int array4[1700000]; 

     int array5[16000000]; 
     printf("first array declared fine.\n"); 
     int array6[17000000]; 
    } 

+0

我不那麼舒服你想做什麼。 但數組應該沒有問題來保存超過2^24的值。 (只有大約1600萬個元素) 也許你可以舉一個例子代碼? – nuriaion 2010-06-23 09:47:31

+2

你在棧上創建數組嗎?如果是這樣,堆棧溢出可能會導致段錯誤。 – Job 2010-06-23 09:53:11

+0

你的數組有多少個元素?分段故障發生在哪個索引?你能否顯示代碼的違規區域? – vpit3833 2010-06-23 10:06:29

回答

5

由於您正在堆棧上創建數組,因此我認爲您的段錯誤是由堆棧溢出引起的。我建議在堆上創建這麼大的陣列,像這樣:

int* array = malloc(17000000 * sizeof(int)); 

所以你得到一個段錯誤的原因無關使用2^24大指標,但有一個事實,即所有的大小你組合的數組大於堆棧的大小,導致堆棧溢出。

+0

我真的得到pwnd的網站名稱嗎? 哦,是的,我想我是。 謝謝! – gokoon 2010-06-23 10:32:51

相關問題