0
#include<stdio.h>
#define ARSIZE 1000000
int main()
{
    int i=0,j=0,c=0,k,n;
    int prep[ARSIZE];
    for(i=0;i<1000000;i++)
    {
                          j++;
                          for(k=2;k<j;k++)
                          {
                                          if(j%k==0)
                                          c++;
                                          }
                                          if(c==2)
                                          prep[i]=j;
                                          c=0;
                                          }
                                          printf("Enter N : ");
                                          scanf("%d\n",&n);
                                          printf("%d",prep[n-1]);
                                          getch();
                                          return 0;
                                          }

why is this code giving segmentation fault??

3
Contributors
5
Replies
7
Views
6 Years
Discussion Span
Last Post by vikashj
0

You have probably corrupted your stack by using an array with automatic storage duration that is too large. Try reducing the array size and run the code again.

#define ARSIZE 1000000

0

You have probably corrupted your stack by using an array with automatic storage duration that is too large. Try reducing the array size and run the code again.

#define ARSIZE 1000000

thanks a lot. It worked. But does that mean there is an upper limit to the number of elements I can store in an array?? In that case, how is the limit decided?

0

You need to understand the computer program memory layout in C. In C or C++ local objects are usually allocated on the stack. You are allocating something large on the stack, more than the stack can handle, so you are getting a STACKOVERFLOW.

If you allocate the array on the heap you should be fine, assuming your machine has enough memory.

int* array = new int[1000000];

But remember that this will require you to delete[] the array.

Another way to achive it making the variable global.This will allocate in the HEAP.

Check out below link for C memory layout:
http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch07lev1sec6.html

0

You've provided an excellent answer, vikashj, except that new and delete are not going to work in C.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.