我正在研究一个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
有人可以帮我解决这个错误吗?你需要更多代码才能得到一个好的答案吗?
答案 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_that
和whatever
之间的关系,这就是你得到警告的原因。对此警告的一种可能的快速修复方法是将变量初始化为您声明它的默认值。在我看来,保留初始化是一种不好的做法,也是很多错误的来源。
答案 1 :(得分:2)
这意味着
pNamesPtr
,因此它以无效值开头;和检查声明中的所有代码路径到使用点。他们都分配了对变量有意义的东西吗?如果没有,请修复它们。
如果他们这样做了,并且你确信你正确地分配了它,那么你是否可以简化代码,以便编译器明白它是什么?
如果所有其他方法都失败了,那么您可以通过将编译器初始化为nullptr
或初始化中的某个其他默认值来使编译器静音。但只有在你确定你的代码是正确的时才这样做 - 编译器通常善于发现这样的错误。
答案 2 :(得分:-1)
将其放入您的代码中:
main.class=[myPackage].MyMain
arg1=SomeValue
arg2=SomeOtherValue
application.args=${arg1} ${arg2}