一个简单地使用new的语句,却引起了堆损坏。

smallstrong1989 2014-05-13 08:38:30

如题。所引起的bug提示如下图。


代码为
bool Decoding(int packetNum, int packetLength, double* data,double* result,int K)
{
// int K = 3;
int M = 2*K;
// m=4;
double innerProduct = 0;
double temp = 0;
int pos = 0 ; // 最大投影系数对应的列的位置;
int* pos_array=new int[M];
for(int i=0;i<M;i++)
pos_array[i]=0;
……
}

运行到第九行再往下运行的时候就会发生上述bug。后面的代码就没贴出来了。
但有一点很奇怪。在调用这个Decoding函数前,若不调用A函数,改为调用B函数,则不会发生上述bug。
烦请各位大大指点迷津啊。。
...全文
783 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallstrong1989 2014-05-21
  • 打赏
  • 举报
回复
找到原因了。确实是A函数有问题,数组越界了。多谢各位了。
lming_08 2014-05-14
  • 打赏
  • 举报
回复
问题应该是在A函数里面,里面可能发生了越界写!
孤影品茗 2014-05-14
  • 打赏
  • 举报
回复
估计是M值太大,你单步调试,看看M的大小,太大会申请失败的 也有可能你的k弄错了
jmppok 2014-05-14
  • 打赏
  • 举报
回复
int* pos_array=new int[M]; M太大,有可能会申请失败的。 比如大于4M就可能失败
sniffer12345 2014-05-14
  • 打赏
  • 举报
回复
肯定在A函数里头啦。A函数里头如果我没估计错的话,楼主使用了一个空指针去做事情,导致栈被破坏了。 另外,别动不动就怀疑new 失败,我写了这么多年程序,还真没遇到过。
Saleayas 2014-05-14
  • 打赏
  • 举报
回复
new 不需要检测 NULL 返回。 因为 new 没有 NULL 返回。 new 使用 std::bad_alloc 异常。
Saleayas 2014-05-14
  • 打赏
  • 举报
回复
可能你的 A 函数中,破坏了堆空间。 这个错误,表示不是这句出错了,而是,在这个时候,去检测堆的时候,发现堆已经被破坏了。 如果你能检测到,那个函数调用引起的破坏,就已经很容易找到了。 必须,空引用,越界之类的。 最糟糕的莫过于定义不一致引起的。
赵4老师 2014-05-14
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
ztenv 版主 2014-05-14
  • 打赏
  • 举报
回复
把A函数贴出来看看吧,
ri_aje 2014-05-14
  • 打赏
  • 举报
回复
引用 1 楼 lyyslsw 的回复:
首先建议一下申请内存的规范。 int* pos_array= NULL; pos_array = new int[M]; if(!pos_array) { return; } 因为并不是每次申请内存都是成功的,如果不成功,不应道导致程序崩溃
这么写和主楼的写法没有区别,除了废话更多。
ri_aje 2014-05-14
  • 打赏
  • 举报
回复
A 函数跟可能是导致问题的原因,里面可能包含了溢出等未定义操作。
bEst_02 2014-05-14
  • 打赏
  • 举报
回复
堆被破坏了,请检查其他函数,比如:A函数
Johnblx 2014-05-14
  • 打赏
  • 举报
回复
首先建议一下申请内存的规范。 int* pos_array= NULL; pos_array = new int[M]; if(!pos_array) { return; } 因为并不是每次申请内存都是成功的,如果不成功,不应道导致程序崩溃

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧