可能重复:
尝试在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中使用指针之前,您需要将指针设置为现有的内存块,您需要为它分配内存,就像这样。
需要了解更多c/c++开发分享无法为变量和指针赋值,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
int *ptr = (int *)malloc(sizeof(int));
以上就是c/c++开发分享无法为变量和指针赋值相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980212.html