2012-10-13 128 views
1

此代码编译并运行虽然给出了微软编译器错误,我不能修复未初始化的局部变量

警告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'; 
} 
+0

该程序看起来不错,但我没有MSVC检查。祝你好运! –

+1

当我编译时,我得到:'警告C4189:'ptr4D':局部变量被初始化但未被引用'。 –

回答

3

你所访问过ptr4D结束。 DIM0是2,比最后一个索引1大1!

更改的最后几行:

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

不知道如果我能帮助你,但我试图找出什么是错的尝试我的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的值为,因此您正尝试访问超出ptr4D的内存地址。正如user1721424所提到的,只需将DIM0替换为,就完成了!

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

希望它有帮助!

+0

行动,我的不好,你在我回答之前更新它。编辑澄清! –