此代码编译并运行虽然给出了我无法修复的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';
}
答案 0 :(得分:3)
您正在访问ptr4D
的末尾。 DIM0
是2,比最后一个1的索引大一个!
将最后几行更改为:
//array of 2 pointers to pointers to pointers of floats
float ***ptr4D[DIM0] = {za, zb};
cout << &***ptr4D[0] << '\n';
答案 1 :(得分: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 的值为 2 ,因此您尝试访问ptr4D之外的内存地址。如上所述user1721424,只需将 DIM0 替换为 0 即可完成!
#After fixing it:
~$ ./a.out
0x7fff74cd3830
Done!
希望它有所帮助!