realloc 的这种用法正确吗? (尝试通过将数组的大小加倍来增加数组的大小)

问题描述 投票:0回答:1

问题是每次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);
}
c malloc
1个回答
0
投票
  1. realloc 返回 void 而不是 void*
  2. 如果 realloc 失败,您可能必须进行 malloc,然后将内存复制到新地址
© www.soinside.com 2019 - 2024. All rights reserved.