C 访问全局整数数组时出现分段错误
我正在编写C代码来获取用户参数并从中构建一个整数数组。我要求用户提供数组长度和每个元素的值 运行以下代码会导致C 访问全局整数数组时出现分段错误,c,arrays,pointers,segmentation-fault,C,Arrays,Pointers,Segmentation Fault,我正在编写C代码来获取用户参数并从中构建一个整数数组。我要求用户提供数组长度和每个元素的值 运行以下代码会导致printary()函数调用出错。调试器进入printArray()后,分段错误本身发生在printf(“%d”,intArray[i]) 注意:当我将printArray()代码复制到main()而不是进行函数调用时,数组被正确打印。这让我觉得我对全局变量和/或指针有问题。我还在学习C语言,非常感谢您的指导 我怎样才能解决这个问题?有关更多信息,请参见底部的调试器输出 void pri
printary()
函数调用出错。调试器进入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");
}
void printary();
内部阵列化;
int*intArray;
int main(){
printf(“输入数组长度:\n”);
scanf(“%d”,阵列化(&A);
int*intArray=(int*)malloc(sizeof(int)*arraySize);
printf(“为每个数组元素输入一个整数值:\n”);
for(int i=0;i
我想您已经在main()中重新声明了intArray变量 通过执行此操作,此变量的作用域仅在主函数中,printArray()不知道此定义。因此printArray()尝试访问您全局声明的intArray变量(该变量没有定义),从而导致分段错误
所以只要给出
intArray=(int*)malloc(sizeof(int)*arraySize)代码>我想您已经在main()中重新声明了intArray变量
通过执行此操作,此变量的作用域仅在主函数中,printArray()不知道此定义。因此printArray()尝试访问您全局声明的intArray变量(该变量没有定义),从而导致分段错误
所以只要给出intArray=(int*)malloc(sizeof(int)*arraySize)代码>是否使用多个线程?不,至少不是有意的。尽管Rajesh在下面发布了解决方案,但我对thread2
部分感到好奇。可能main()有自己的线程?是否使用多个线程?不,至少不是有意的。尽管Rajesh在下面发布了解决方案,但我对thread2
部分感到好奇。也许main()有自己的线程?谢谢。我已将intArray
声明移动到全局空间,以明确使用printary()
的目的,但忘记删除main()
中的声明部分,谢谢。我已将intArray
声明移动到全局空间,以明确使用printary()
的目的,但忘记删除main()中的声明部分
int* intArray = (int*) malloc(sizeof(int)*arraySize);