可能重复:
Segmentation Fault when attempting to print value in C
我对C很新,但不知道为什么这个程序会破坏。如果我删除与i
有关的行,程序将编译并运行,但如果我指定i
,我将无法在没有程序中断的情况下向*ptr
分配任何内容。
int main(void)
{
int i;
int *ptr;
i = 2;
*ptr = 5;
printf("%d",*ptr);
}
答案 0 :(得分:11)
您将指针保留为未初始化的值。因此,当您取消引用它(*ptr
)时,您将访问内存中的任意位置,从而导致分段错误。
通过为ptr
本身(不是ptr
)分配变量的地址(如*ptr
)或一些新分配的内存(如{{{{{{{ 1}})。
答案 1 :(得分:4)
以下是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
}
另请注意,免费出来!!!
答案 2 :(得分:1)
你宣布ptr但没有指出任何事情。然后你试着写下它指向的内容。这绝不是一个好主意。尝试通过添加行
使ptr指向iptr = &i;
在您尝试写入* ptr
之前答案 3 :(得分:0)
在C中使用指针之前,您需要将指针设置为现有的内存块,您需要为它分配内存,就像这样。
int *ptr = (int *)malloc(sizeof(int));