C 访问全局整数数组时出现分段错误

C 访问全局整数数组时出现分段错误,c,arrays,pointers,segmentation-fault,C,Arrays,Pointers,Segmentation Fault,我正在编写C代码来获取用户参数并从中构建一个整数数组。我要求用户提供数组长度和每个元素的值 运行以下代码会导致printary()函数调用出错。调试器进入printArray()后,分段错误本身发生在printf(“%d”,intArray[i]) 注意:当我将printArray()代码复制到main()而不是进行函数调用时,数组被正确打印。这让我觉得我对全局变量和/或指针有问题。我还在学习C语言,非常感谢您的指导 我怎样才能解决这个问题?有关更多信息,请参见底部的调试器输出 void pri

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

运行以下代码会导致
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);