昨晚我花了一大笔时间来追踪我的应用程序中的段错误.最终,原来我写道:
ANNE_SPRITE_FRAME *desiredFrame;
*desiredFrame = anne_sprite_copy_frame(&sprite->current);
Run Code Online (Sandbox Code Playgroud)
代替:
ANNE_SPRITE_FRAME desiredFrame;
desiredFrame = anne_sprite_copy_frame(&sprite->current);
Run Code Online (Sandbox Code Playgroud)
在第1行中,我创建了一个类型化指针,在第2行中,我将取消引用指针的值设置为返回的结构anne_sprite_copy_frame().
为什么这是一个问题?为什么编译器会接受这个呢?我能想到的只是示例1中的问题是:
在第1行中,我创建了一个类型化指针,在第2行中,我将取消引用指针的值设置为anne_sprite_copy_frame()返回的结构.
这两个都在C中允许,这就是编译器完全可以接受的原因.
编译器不会检查以确保您的指针实际指向任何有意义的东西 - 它只是取消引用和分配.
C的最好和最差的功能之一是编译器对你做的很少的理智检查 - 它遵循你的指示,并完全按照你的要求去做.你告诉它做两个合法的操作 - 即使变量没有正确初始化.因此,您会遇到运行时问题,而不是编译时问题.