我对 C 很陌生,但不知道为什么这个程序会中断。如果我删除与 相关的行,程序将编译并运行i
,但如果我分配i
,我将无法再分配任何东西而*ptr
不会破坏程序。
int main(void)
{
int i;
int *ptr;
i = 2;
*ptr = 5;
printf("%d",*ptr);
}
您将指针保留为未初始化的值。因此,当您取消引用它 ( *ptr
) 时,您会访问内存中的任意位置,从而导致分段错误。
通过将变量的地址(如)或一些新分配的内存(如)分配给自身(而不是)来指向ptr
某物。ptr
*ptr
&i
malloc(sizeof(int))
这是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));