猿问

在调试时发现shortTargets有地址,但shortTargets[1]是一个乱码地址?为什么?

如问题中的两个C++语句,
int **shortTargets;
shortTargets = new int *[fileSum];
是从别人的代码中找出来的,运行时出了问题。这个两个语句的意思应该是创建一个指针数组吧,数量是fileSum个。但是在调试时发现,shortTargets有地址,但shortTargets[1]是一个乱码地址,请问这是怎么回事呢?应该怎样解决?

青春有我
浏览 113回答 4
4回答

噜噜哒

shortTargets[1] 没有开辟内存空间,肯定是乱码了可以这么初始化:for(int i=0;i<fileSum;i++)shortTargets[i] = new int[10];

慕村225694

你这样定义了指针数组后,相当于定义了一组指针,但是这些指针都没有赋值。可以shortTargets[1] = NULL;类似的给指针赋值为空,或者shortTargets[1] = new int[10];给指针分配内存空间。

DIEA

指针数组 还没有被初始化,当然都是乱码:int **shortTargets;shortTargets = new int *[fileSum];memset(shortTargets, 0, fileSum);再看下shortTargets[1]的值是不是0了。

慕妹3242003

事实如此 C++任何非void对象都有地址,包括指针 指针的指针.. debug下new 对象自动初始化为0xcdcdcdcd,也就是shortTargets[1]的初始值.shortTargets使用一般会有二次类初始化赋值,即 先有shortTargets=new int *[fileSum];for(int i=0;i<fileSum;++i)shortTargets=new int;//该赋值按实际使用赋值
随时随地看视频慕课网APP
我要回答