【问题标题】:uninitialized local variable未初始化的局部变量
【发布时间】:2012-10-03 21:18:53
【问题描述】:

此代码编译并运行,但给出了我无法修复的 Microsoft 编译器错误

警告 C4700:使用了未初始化的局部变量 ''。

我认为这是代码的最后一行

#include <iostream>
using namespace std;

const int DIM0 = 2, DIM1 = 3, DIM2 = 4, DIM3 = 5;

void TestDeclar();

int main(){
    TestDeclar();
    cout << "Done!\n";
    return 0;
}

void TestDeclar(){        
    //24 - array of 5 floats
    float xa[DIM3], xb[DIM3], xc[DIM3], xd[DIM3], xe[DIM3], xf[DIM3];
    float xg[DIM3], xh[DIM3], xi[DIM3], xj[DIM3], xk[DIM3], xl[DIM3];   
    float xm[DIM3], xn[DIM3], xo[DIM3], xp[DIM3], xq[DIM3], xr[DIM3];
    float xs[DIM3], xt[DIM3], xu[DIM3], xv[DIM3], xw[DIM3], xx[DIM3];

    //6  - array of 4 pointers to floats
    float *ya[DIM2] = {xa, xb, xc, xd}, *yb[DIM2] = {xe, xf, xg, xh};   
    float *yc[DIM2] = {xi, xj, xk, xl}, *yd[DIM2] = {xm, xn, xo, xp};
    float *ye[DIM2] = {xq, xr, xs, xt}, *yf[DIM2] = {xu, xv, xw, xx};

    //2 - array of 3 pointers to pointers of floats
    float **za[DIM1] = {ya, yb, yc};    
    float **zb[DIM1] = {yd, ye, yf};

    //array of 2 pointers to pointers to pointers of floats
    float ***ptr[DIM0] = {za, zb};   
    cout << &***ptr[DIM0] << '\n';  
}

【问题讨论】:

  • 那个程序对我来说看起来不错,但我没有 MSVC 可以检查。祝你好运!
  • 编译时我得到:`warning C4189: 'ptr4D' : local variable is initialized but not referenced'。

标签: c++ variables pointers local initialization


【解决方案1】:

您正在访问ptr4D 的末尾。 DIM0 是 2,比最后一个索引 1 大一!

将最后几行改为:

//array of 2 pointers to pointers to pointers of floats
float ***ptr4D[DIM0] = {za, zb};   
cout << &***ptr4D[0] << '\n';  

【讨论】:

    【解决方案2】:

    不确定我是否可以帮助你,但我试图找出在我的 linux 机器上运行它的问题。我已经在 ubuntu 机器上对其进行了编译以进行比较,结果一切正常,甚至告诉编译器打开所有选项警告(通过 -Wall 选项)。运行时,我得到了这个:

    # Compiled it with -Wall to enable all warning flags and -g3 to produce extra debug information
    ~$ g++ -Wall stackoverflow.cpp -g3
    ./a.out 
    Segmentation fault (core dumped)
    

    然后我尝试使用 GDB(GNU 调试器)对其进行调试,结果如下:

    (gdb) r
    Starting program: /home/ubuntu/a.out 
    
    Program received signal SIGSEGV, Segmentation fault.
    0x0000000000400986 in TestDeclar () at stackoverflow.cpp:34
    34          cout << &***ptr4D[DIM0] << '\n';  
    (gdb) s
    

    所以看来问题出在 cout 行。再次检查您的代码,DIM0 的值为 2,因此您正在尝试访问 ptr4D 之外的内存地址。正如user1721424 提到的,只需将 DIM0 替换为 0 即可!

    #After fixing it:
    ~$ ./a.out 
    0x7fff74cd3830
    Done!
    

    希望对你有帮助!

    【讨论】:

    • Ops,我的错,在我回答之前你已经更新了它。为澄清而编辑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多