I am using GCC + the terminal to make an array of prime numbers.
I once asked on #C@irc.freenode.net, but I still don't understand:
An int can store values on 32 bits (so a total of 2^32 unique values), but can't an array have more than 2^24 values ?
I'm not sure, but is Why 24 bits registers? already answers my question ?
And does that mean that making an array of long int
doesn't solve the problem ? Is there some (proportionately fast) way I can bypass this, like using an int[][]
to store those numbers ? Or maybe an include or lib to use an arbitrary number of bytes to store numbers ?
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];
}
Since you are creating your arrays on the stack, I suppose your segfault is caused by a stack overflow. I would suggest creating such big arrays on the heap, like this:
int* array = malloc(17000000 * sizeof(int));
So the reason that you get a segfault has nothing to do with using indexes larger than 2^24 but with the fact that the size of all your arrays combined is larger than the size of the stack, causing a stack overflow.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.