简单函数分割错误

L_C*_*leo 0 c segmentation-fault

调用此函数时,我始终遇到分段错误11

    void flexibleArray(int *array, int *length) {
    int cnt = 0, number = 0;
    while (number!=-1) {
        printf("\nInsert the variable :"); scanf("%d", &number);
        if (number!=-1){
            cnt++;
            array = realloc(array, cnt * sizeof(int));
            array[cnt-1] = number;
        }
    }
    *length = cnt;
}
Run Code Online (Sandbox Code Playgroud)

int *array = NULL, arrayLength;
flexibleArray(array, &arrayLength);
Run Code Online (Sandbox Code Playgroud)

这是我一直使用的一个非常简单的函数,我不明白为什么它现在会给我这个错误。我一直在尝试解决可能给我带来问题的生产线,而我发现脱*length = cnt;线显然不会给我带来问题。我是否可以避免出错?谢谢

正确的代码:

   int* flexibleArray(int *length) {
    int *flexArray = NULL;
    int cnt = 0, number = 0;
    while (number!=-1) {
        printf("\nInsert the variable :"); scanf("%d", &number);
        if (number!=-1){
            cnt++;
            flexArray = realloc(flexArray, cnt * sizeof(int));
            flexArray[cnt-1] = number;
        }
    }
    *length = cnt;
    return flexArray;
}
Run Code Online (Sandbox Code Playgroud)

和在main()

int *array = NULL, arrayLength;
array = flexibleArray(&arrayLength);
Run Code Online (Sandbox Code Playgroud)

kir*_*dar 6

作为初始化为null的指针,而arrayLength仅定义为int而不进行初始化

在这种情况下,您需要将其引用传递给函数。

flexibleArray(&array, &arrayLength);
Run Code Online (Sandbox Code Playgroud)

和功能将成为

void flexibleArray(int **array, int *length) {
    int cnt = 0, number = 0;
    while (number!=-1) {
        printf("\nInsert the variable :"); scanf("%d", &number);
        if (number!=-1){
            cnt++;
            *array = realloc(*array, cnt * sizeof(int));
            (*array)[cnt-1] = number;
        }
    }
    *length = cnt;
}
Run Code Online (Sandbox Code Playgroud)

要么

从函数返回新指针。

int *flexibleArray(int *array, int *length)
{
  ....
  return array;
}
Run Code Online (Sandbox Code Playgroud)

main

array = flexibleArray(array, &arrayLength);
Run Code Online (Sandbox Code Playgroud)