我執行Sieve of eratosthenes它工作正常。但是,如果我將MAX值增加到50000之類的應用程序崩潰與未處理的win32異常。我認爲這是因爲一個stackoverflow。Programm崩潰情況下MAX值太大
現在我的問題是如何防止這種情況?
#define MAX 50000
void Sieb_des_Eratosthenes()
{
char Zahlen[MAX + 1] = {0};
int i, j, x;
for(i = 2; i <= MAX; i++)
{
if(Zahlen[i] == 0)
{
Zahlen[i] = 1;
for(j = i * i; j <= MAX; j += i)
{
Zahlen[j] = -1;
}
}
}
}
我的想法是分配內存,但是,這並不工作
#define MAX 50000
int Sieb_des_Eratosthenes()
{
int i, j, x;
char *array;
array = malloc((MAX + 1) * sizeof(*array));
if (array==NULL) {
printf("Error allocating memory!\n");
return -1; //return with failure
}
for(i = 2; i <= MAX; i++)
{
if(array[i] == 0)
{
array[i] = 1;
for(j = i * i; j <= MAX; j += i)
{
array[j] = -1;
}
}
}
}
'但這並不work' - 你能更具體?你有編譯錯誤嗎?運行時錯誤?意外的結果? – 2013-04-24 07:29:14
@Andreas我得到了和未處理的win32異常一樣的錯誤 – 2013-04-24 07:32:31
在內部for循環中添加'printf(「%d \ n」,j);''。在一些迭代超出數組的範圍之後,您會看到j的值爲'-2146737495'。此外,有人建議(同時刪除回答)使用'calloc()'而不是'malloc()',以便數組初始化 - 這是一個非常好的建議,但不修複數組索引問題 – 2013-04-24 07:36:47