问题是每次realloc都会失败。我想知道我是否正确使用它。
if (iNum >= ArrSize) {
ArrSize = ArrSize * 2;
NumArr = realloc(NumArr, ArrSize * sizeof(int));
if (NumArr == NULL) {
printf("Array not reallocated!\n");
printf("Array size was: %d", ArrSize);
return 1;
}
}
我尝试打印变量 ArrSize 的值。输出是:
Enter the amount of prime numbers to list: 5
2
3
5
Array not reallocated!
Array size was: 8
所以并不是ArrSize的值太大或者为负值的问题。
这就是整个功能:
int PrimeChecker(int nPrime) {
size_t ArrSize = nPrime - 1;
int iFlag, CurPrime;
int j = 1;
int *NumArr = calloc(ArrSize, sizeof(int)); // Array (Pointer) of flags for filtering non-prime numbers
if (NumArr == NULL) {
fprintf(stderr, "Array not allocated!");
return 1;
}
for (int iNum = 2; CurPrime != nPrime + 1; iNum++) {
if (NumArr[iNum] != 1) {
printf("%d\n", iNum);
CurPrime++;
iFlag = iNum;
for (; (iFlag * j) <= nPrime; j++) {
NumArr[iFlag * j] = 1;
}
j = 0;
if (iNum >= ArrSize) {
ArrSize = ArrSize * 2;
NumArr = realloc(NumArr, ArrSize * sizeof(int));
if (NumArr == NULL) {
fprintf(stderr, "Array not reallocated!\n");
printf("Array size was: %d", ArrSize);
return 1;
}
}
}
}
free(NumArr);
}