简单函数分割错误

时间:2019-06-17 12:56:32

标签: 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;
}

int *array = NULL, arrayLength;
flexibleArray(array, &arrayLength);

这是我一直使用的一个非常简单的函数,我不明白为什么它现在会给我这个错误。我一直在尝试解决可能给我带来问题的那条线,而我发现取消*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;
}

和main()

int *array = NULL, arrayLength;
array = flexibleArray(&arrayLength);

1 个答案:

答案 0 :(得分:6)

  

作为初始化为null的指针,而arrayLength仅定义为   int且未初始化

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

flexibleArray(&array, &arrayLength);

功能将变为

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;
}

从函数返回新指针。

int *flexibleArray(int *array, int *length)
{
  ....
  return array;
}

来自main

array = flexibleArray(array, &arrayLength);