首页 > 解决方案 > 简单函数的分段错误

问题描述

调用此函数时,我不断收到分段错误 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);

标签: csegmentation-fault

解决方案


作为初始化为 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);

推荐阅读