C++ 错误C4703:可能未初始化的本地指针变量';pNamesPtr&x27;习惯于

C++ 错误C4703:可能未初始化的本地指针变量';pNamesPtr&x27;习惯于,c++,C++,我正在从事一个加密程序项目,在试图编译该程序时遇到以下错误 main.cpp(520):错误C4703:可能未初始化的本地指针 使用变量“pNamesPtr” ======生成:0成功,1失败,0最新,0跳过========== DLLNAMES[i].UsedAlready=0; } *dwOutSize=(DWORD)pNamesPtr-(DWORD)pBuffer//* 意思是 声明时不初始化pNamesPtr,因此它以无效值开头;及 编译器无法确定您在使用它之前是否为它分配了有效值

我正在从事一个加密程序项目,在试图编译该程序时遇到以下错误

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

DLLNAMES[i].UsedAlready=0;
}
*dwOutSize=(DWORD)pNamesPtr-(DWORD)pBuffer//* 意思是

  • 声明时不初始化pNamesPtr,因此它以无效值开头;及
  • 编译器无法确定您在使用它之前是否为它分配了有效值
检查从声明到使用点的所有代码路径。他们都给变量分配了合理的值吗?如果没有,请修复它,让他们这样做

如果他们这样做了,并且您确信您正确地分配了它,那么您是否可以简化代码,使编译器清楚地知道它是正确的


如果所有其他操作都失败,那么您可以通过将编译器初始化为
nullptr
或初始化中的其他一些默认值来使编译器静音。但是,只有当你确信你的代码是正确的时候,才可以这样做——编译器通常很擅长发现这样的错误。

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

例如,如果我写:

int i;

if (this_and_that)
    i = 5;

if (whatever)
    printf("%d\n", i);  // <--- this may give a potential blahblah warning
inti;
如果(这个和那个)
i=5;
如果(无论什么)
printf(“%d\n”,i);// 在代码中输入以下内容:

xtype *pNamesPtr = NULL

我们无法判断您是否初始化了它。您是如何声明的
pNamesPtr
。添加相同的代码。当我不小心的时候,这种情况经常发生在我身上-如果你有
if-else if-else
这样的设置,你就知道变量/指针的值会被设置,因为你有
else
,但是因为它们只是偶尔被调用,编译器很可能会被调用complain@chrisb2244对如果我们想泛化我的语句:如果您试图在变量初始化和变量使用之间的所有可能的代码执行路径上使用未初始化的变量,则会出现此警告。因此,任何生成带有“jump/goto”的代码的控制流语句都可能导致这种情况,例如,
switch
可以做同样的事情,但是一个更奇特的控制流示例:
break
-如果变量的初始化在break语句之后位于循环内部,则从循环中退出可能会导致此问题…更正我之前的评论:在变量声明和变量使用之间我认为这个答案可以改进,它不清楚应该放在哪里,并且没有用正确的格式突出显示代码。
xtype *pNamesPtr = NULL