2010-06-23 40 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

相关问题