我正在编写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");
}
答案 0 :(得分:2)
我认为你在main()
中重新声明了intArray变量int* intArray = (int*) malloc(sizeof(int)*arraySize);
通过这样做,此变量的范围仅在main函数中,printArray()不知道此定义。因此printArray()尝试访问已全局声明的intArray变量(没有定义),从而导致分段错误。
所以请给intArray = (int*) malloc(sizeof(int)*arraySize);