为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

4 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

查看完整回答
反对 回复 2022-05-15
?
慕村225694

TA贡献1880条经验 获得超4个赞

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

查看完整回答
反对 回复 2022-05-15
?
DIEA

TA贡献1820条经验 获得超2个赞

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

查看完整回答
反对 回复 2022-05-15
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

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

查看完整回答
反对 回复 2022-05-15
  • 4 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信