g++与MSc++中的未初始化指针
最近,我阅读了一个编码示例,其中解释了以下内容会导致 Visual Studio 中的编译器错误:
int* pointer1;
*pointer1 = 10;
作者声称由于pointer1在解引用之前未初始化,所以在Visual Studio中出现如下错误:
C4700:使用了未初始化的局部变量“pointer1”
确实如此。这个场景是有道理的。
但是,如果我使用完全相同的代码并使用 g++ 进行编译,则不会发生编译器错误并且我可以pointer1以任何正常方式自由使用。
为什么会有差异?g++ 是否pointer1在初始化之前分配了地址?
回答
尝试传递-Wuninitialized -Werror给gcc。此外-Wmaybe-uninitialized可能有助于识别未初始化变量的执行路径。
附带说明:取消引用未初始化的指针是未定义的行为。这意味着编译器可以但不必诊断它。完全归咎于开发商。