C 指针错误消息

C 指针错误消息,c,xcode,macos,pointers,C,Xcode,Macos,Pointers,如果我的问题看起来很琐碎,我会提前向你道歉,但我不明白为什么我要逃跑 int main(){ int *count = 0; printf("%d",*count); } 我没有输入(使用Xcode)和一个错误: 线程1:EXC\u错误访问(代码=1,地址=0x0) 有人能给我解释一下这是什么吗?所发生的是取消对空指针的引用,这是一种未定义的行为:您的计数是一个指针,这意味着它需要指向一个有效位置,然后您才能从中读取: int main(){ int *count =

如果我的问题看起来很琐碎,我会提前向你道歉,但我不明白为什么我要逃跑

int main(){
    int *count = 0;
    printf("%d",*count);
}
我没有输入(使用Xcode)和一个错误:

线程1:EXC\u错误访问(代码=1,地址=0x0)


有人能给我解释一下这是什么吗?

所发生的是取消对空指针的引用,这是一种未定义的行为:您的
计数是一个指针,这意味着它需要指向一个有效位置,然后您才能从中读取:

int main(){
    int *count = malloc(sizeof(int)); // Give your pointer a valid location
    *count = 123;                     // This is valid now
    printf("%d", *count);             // prints 123
    free(count);                      // Don't forget to free allocated memory
}

所发生的情况是取消对空指针的引用,这是一种未定义的行为:您的
count
是一个指针,这意味着它需要指向一个有效位置,然后才能从中读取:

int main(){
    int *count = malloc(sizeof(int)); // Give your pointer a valid location
    *count = 123;                     // This is valid now
    printf("%d", *count);             // prints 123
    free(count);                      // Don't forget to free allocated memory
}

您已将
count
声明为指向整数值的指针,而不是整数值,并且已将指针初始化为空(内存地址0)

您将要执行以下操作

int main()
{
   int buffer = 0;
   int* count = &buffer;
   printf( "var %d = %d\n", buffer, *count );
}

您已将
count
声明为指向整数值的指针,而不是整数值,并且已将指针初始化为空(内存地址0)

您将要执行以下操作

int main()
{
   int buffer = 0;
   int* count = &buffer;
   printf( "var %d = %d\n", buffer, *count );
}

只是为了测试一下,如果我把这段代码放在一个cpp文件中,我会得到一行“int*count=malloc(sizeof(int));”不能用void*类型的右值初始化int*类型的变量;是否有一个等价于CPP文件?@ USE1611830,那是因为你使用C++编译器:在C++中需要一个强制转换:<代码> int *Cuint =(int *)Malc(siZeof(int));代码>我没有放置强制转换,因为它在C中不是必需的。只是为了测试,如果我将此代码放置在cpp文件中,我会得到行“int*count=malloc(sizeof(int));”无法使用void*类型的右值初始化int*类型的变量;是否有一个等价于CPP文件?@ USE1611830,那是因为你使用C++编译器:在C++中需要一个强制转换:<代码> int *Cuint =(int *)Malc(siZeof(int));代码>我没有加入演员阵容,因为这在C中不是必需的。顺便说一句,@CarlNorum,我不是有意要分开头发,如果我的评论听起来像这样,我很抱歉。顺便说一句,@CarlNorum,我不是有意分开头发,如果我的评论听起来像这样,我很抱歉。