代码之家  ›  专栏  ›  技术社区  ›  altair00

使用“realloc”调整现有阵列的大小`

  •  1
  • altair00  · 技术社区  · 2 年前

    我定义了一个数组,并尝试使用 realloc() 但它不起作用。我的问题是我可以用 arr[] calloc() malloc() 首先定义数组,然后使用 realloc() ?

    这是我目前为止的工作。。。

    #include <stdio.h>
    #include <stdlib.h>
    
    void printArray (int *arr, int size) {
    
        printf("{");
    
        for (int i=0; i<size; i++) {
            if (i == size-1) {
                printf("%d", arr[i]);
            } else {
                printf("%d, ", arr[i]);
            }
        }
    
        printf("}\n");
    }
    
    
    int main () {
    
    
        int arr[] = {1, 2, 3};
    
        int size = sizeof(arr)/sizeof(arr[0]);
    
        printArray(arr, size);
    
        ////////////////////////////////////////
    
        int newSize = size++;
    
        arr = realloc(arr, newSize*sizeof(int));
    
        printArray(arr, newSize);
    
    
        return 0;
    }
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Vlad from Moscow    2 年前

    首先,你的意思是

    int newSize = ++size;
    

    而不是

    int newSize = size++;
    

    此阵列

    int arr[] = {1, 2, 3};
    

    具有自动存储持续时间。

    请注意,如果阵列 arr

    int newSize = ++size; // not size++
    
    arr = realloc(arr, newSize*sizeof(int));
    

    数组的最后一个元素的值不确定,因为它未初始化。