无法为变量和指针赋值

可能重复:
尝试在C中打印值时出现分段错误

我对C很新,但不知道为什么这个程序会破坏。 如果我删除与i有关的行,程序将编译并运行,但是如果我分配i ,我将无法在没有程序中断的情况下为*ptr分配任何内容。

 int main(void) { int i; int *ptr; i = 2; *ptr = 5; printf("%d",*ptr); } 

您将指针保留为未初始化的值。 因此,当您取消引用它( *ptr )时,您将访问内存中的任意位置,从而导致分段错误。

通过为ptr本身(不是*ptr )分配变量的地址(如&i )或一些新分配的内存(如malloc(sizeof(int)) )来指向ptr

以下是C的答案:

 int main(void) { int i; int * ptr = (int *)malloc(sizeof(int)); i = 2; *ptr = 5; printfn("%d",*ptr); free(ptr); } 

或者你可以为i和* ptr赋值行使用类似的东西:

 int main(void) { int i; int * ptr; i = 2; ptr = &i; printfn("%d",*ptr); // should print 2 } 

另请注意,免费出来!!!

你宣布ptr但没有指出任何事情。 然后你试着写下它指向的内容。 这绝不是一个好主意。 尝试通过添加行来使ptr指向i

 ptr = &i; 

在你尝试写入* ptr之前

在C中使用指针之前,您需要将指针设置为现有的内存块,您需要为它分配内存,就像这样。

 int *ptr = (int *)malloc(sizeof(int));