c - 为什么我在评论 malloc() 调用时会出现分段错误(核心转储)?
问题描述
int main()
{
struct stuff
{
int num;
}*foo;
// If I comment the line below, I get core dump error.
// Why?
foo = (struct stuff *)malloc(sizeof(struct stuff));
(*foo).num = 7;
printf("%d\n", (*foo).num);
}
解决方案
您只能取消引用有效指针。
在您的情况下,foo
除非显式初始化,否则作为自动局部变量包含一些不确定的值,即它指向任意内存位置,这从您的程序的角度来看几乎是无效的。
如果您没有分配一个有效的指针foo
(malloc()
例如,返回),foo
指向某个不确定的内存位置并尝试取消引用它将调用未定义的行为。
分段错误是 UB 的副作用之一。
推荐阅读
- graphql - Prisma Schema 中的多态性 - 最佳实践?
- wordpress - 在 Wordpress 自定义帖子类型上添加多条件搜索引擎
- java - PSQLException:发送到后端时发生 I/O 错误。...引起:java.io.EOFException
- javascript - 引导导航栏中的活动链接名称不会改变颜色
- shell - 如何在shell脚本中调用字符串作为变量?
- python - 在 pandas 中使用 Apply 函数
- spring-boot - 可能是什么原因,我的 SimpleCacheCustomizer 在我的测试启动时没有被调用
- python - Pydoc 忽略 opencv 函数,只考虑使用 def 关键字定义的 python 函数
- mysql - 在表(MYSQL)的特定列中查找“坏词”的最佳方法是什么?
- reactjs - 选择当前项目时如何更改下一个项目的状态