昨晚我花了很长时间追踪我申请表中的一个segfault。最后,我写了:

ANNE_SPRITE_FRAME *desiredFrame;
*desiredFrame = anne_sprite_copy_frame(&sprite->current);

而不是:
ANNE_SPRITE_FRAME desiredFrame;
desiredFrame = anne_sprite_copy_frame(&sprite->current);

在第1行,我创建了一个类型化指针,在第2行,我将取消引用的指针的值设置为anne_sprite_copy_frame()返回的结构。
为什么这是个问题?为什么编译器会接受这个呢?我能想到的是,示例1中的问题是:
我为指针保留了空间,但不是它指向的内容,或者
(不太可能)它试图将返回值存储在指针本身的内存中

最佳答案

我为指针保留了空间,但不是它指向的内容
是的,没错。但是编译器(除非它做了一些静态分析)不能推断出这一点。它只看到语法有效并且类型匹配,所以它编译您的程序。不过,取消对未初始化指针的引用是未定义的行为,因此您的程序很可能会出错。

09-04 02:18