繁体   English   中英

在具有24位以上索引阵列的Macbook Pro上遇到段故障

[英]Got segfault on a macbook pro with a 24+bits indexed array

我正在使用GCC +终端制作素数数组。

我曾经在#C@irc.freenode.net上问过,但我还是不明白:

int可以在32位存储的值(因此总共2 ^ 32个唯一值),但不能阵列具有多于2 ^ 24个值?

我不确定,但是为什么要使用24位寄存器? 已经回答了我的问题?

这是否意味着将long int数组化不能解决问题? 是否有某种(成比例的快速)方法可以绕过此方法,例如使用int[][]存储这些数字? 还是include或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];  
    }

由于您是在堆栈上创建数组,因此我想您的段错误是由堆栈溢出引起的。 我建议在堆上创建如此大的数组,如下所示:

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

因此,出现段错误的原因与使用大于2 ^ 24的索引无关,而是与所有合并的数组的大小大于堆栈的大小有关,从而导致堆栈溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM