gpt4 book ai didi

c - 为什么会产生段错误(核心转储)错误?

转载 作者:行者123 更新时间:2023-11-30 19:02:09 27 4
gpt4 key购买 nike

我是指针新手,我正在运行一些测试代码。我知道段错误意味着我正在尝试访问一些不应该访问的内存;但是,我不明白我的思路有什么问题。

int main(void) {
int *ptr;
*ptr = 400;
printf("%d\n", *ptr);
return 0;
}

该函数编译得很好。根据我的理解,当声明 ptr 时,它具有任意内存地址。然后第二行将 400 作为该内存地址的引用。最后, printf() 行应该返回 400,但它给了我一个核心转储。

有人可以澄清一下吗?我看过几个指针示例,我以为我已经掌握了它的窍门,直到我尝试了这个。

最佳答案

您没有内存可写入。您需要分配内存才能写入。否则你将(可能)遇到段错误。

如果您打开编译时警告,clang 会警告您

prog.cc:6:5: warning: variable 'ptr' is uninitialized when used here [-Wuninitialized]
*ptr = 400;
^~~
prog.cc:4:12: note: initialize the variable 'ptr' to silence this warning
int *ptr ;

这是更正后的代码

#include <stdio.h>
#include<stdlib.h>
int main(void) {
int *ptr = (int*)malloc(sizeof(int));
*ptr = 400;
printf("%d\n", *ptr);
return 0;
}

关于c - 为什么会产生段错误(核心转储)错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56456437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com