访问全局整数数组时的分段错误

时间:2017-02-05 07:27:59

标签: c arrays pointers segmentation-fault

我正在编写C代码来获取用户参数并从中构建整数数组。我要求用户提供数组长度和每个元素的值。

运行以下代码会导致printArray()函数调用出错。在调试器进入printArray()之后,分段错误本身发生在printf("%d", intArray[i])

注意:printArray()代码复制到main()而不是进行函数调用时,正确打印了数组。这让我觉得我有全局变量和/或指针的问题。我还在学习C,所以感谢你的指导。

我该如何解决这个问题?有关详细信息,请参阅底部的调试器输出。

void printArray();

int arraySize;
int* intArray;

int main() {

    printf("Enter array length:\n");

    scanf("%d", &arraySize);
    int* intArray = (int*) malloc(sizeof(int)*arraySize);

    printf("Enter an integer value for each array element:\n");
    for (int i = 0; i < arraySize; i++) {
        printf("Enter element %d:\n", i);
        scanf("%d", &intArray[i]);
    }

    printArray();
    return 0;
}

void printArray() {
    printf("[");

    for (int i = 0; i < arraySize; i++) {
      printf("%d", intArray[i]);
    }
    printf("]\n");
}

debugger output

1 个答案:

答案 0 :(得分:2)

我认为你在main()

中重新声明了intArray变量
int* intArray = (int*) malloc(sizeof(int)*arraySize);

通过这样做,此变量的范围仅在main函数中,printArray()不知道此定义。因此printArray()尝试访问已全局声明的intArray变量(没有定义),从而导致分段错误。

所以请给intArray = (int*) malloc(sizeof(int)*arraySize);