错误C4703:使用了未初始化的本地指针变量'pNamesPtr'

时间:2014-02-27 05:02:53

标签: c++

我正在研究一个crypter项目,并在尝试编译程序时遇到以下错误。

  

main.cpp(520):错误C4703:可能未初始化的本地指针   变量'pNamesPtr'使用
  ==========构建:0成功,1个失败,0个最新,0个跳过==========

        DLLNAMES[i].UsedAlready = 0;
    }


    *dwOutSize = (DWORD)pNamesPtr - (DWORD)pBuffer;//*<----is line 520 of error
    *dwImportsSize = *dwOutSize - *dwIATSize;    
    return pBuffer;
}
#pragma pack(1)
typedef struct

有人可以帮我解决这个错误吗?你需要更多代码才能得到一个好的答案吗?

3 个答案:

答案 0 :(得分:7)

此警告并不总是错误,有时它只是优化的结果。因为它在你的代码中并且你不知道它是什么,它实际上可能是一个bug。

例如,如果我写:

int i;

if (this_and_that)
    i = 5;

if (whatever)
    printf("%d\n", i);  // <--- this may give a potential blahblah warning

如果您正在进行优化,那么当whatever的值为true时,您可能知道this_and_that的值始终为true,因此如果printf被调用,则i为已经保证初始化但编译器通常无法弄清this_and_thatwhatever之间的关系,这就是你得到警告的原因。对此警告的一种可能的快速修复方法是将变量初始化为您声明它的默认值。在我看来,保留初始化是一种不好的做法,也是很多错误的来源。

答案 1 :(得分:2)

这意味着

  • 您在声明时不会初始化pNamesPtr,因此它以无效值开头;和
  • 在使用之前,编译器无法确定您是否已为其分配了有效值。

检查声明中的所有代码路径到使用点。他们都分配了对变量有意义的东西吗?如果没有,请修复它们。

如果他们这样做了,并且你确信你正确地分配了它,那么你是否可以简化代码,以便编译器明白它是什么?

如果所有其他方法都失败了,那么您可以通过将编译器初始化为nullptr或初始化中的某个其他默认值来使编译器静音。但只有在你确定你的代码是正确的时才这样做 - 编译器通常善于发现这样的错误。

答案 2 :(得分:-1)

将其放入您的代码中:

main.class=[myPackage].MyMain

arg1=SomeValue
arg2=SomeOtherValue

application.args=${arg1} ${arg2}