gpt4 book ai didi

c - 访问全局整数数组时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:07 25 4
gpt4 key购买 nike

我正在编写 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

最佳答案

我想你已经在 main() 中重新声明了 intArray 变量

int* intArray = (int*) malloc(sizeof(int)*arraySize);

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

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

关于c - 访问全局整数数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com