You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++二维数组输入输出代码报munmap_chunk无效指针错误原因求解

报错原因分析

munmap_chunk(): invalid pointer 报错的核心原因是你传递给delete[]的指针不是new[]返回的原始内存地址。

你在输出数组的嵌套循环中,持续执行p = p + 1修改了指针p本身的存储值:

for( i=0;i<r;i++){
  for( j=0;j<c;j++){
    cout<<*p<<" ";
    p=p+1; // 这里不断修改原始指针的指向
  }
  cout<<endl;
}

遍历完成后,p已经指向了数组最后一个元素之后的非法地址,此时执行delete[] p,内存管理器无法识别这个非堆块起始地址的指针,就触发了内存释放错误。


修复方案

有两种常用的修复方式:

  • 方式一:输出时保持原始指针不变,用偏移量访问元素,和你输入数组时的写法保持一致即可:
cout<<"\nThe array elements are:"<<endl;
for( i=0;i<r;i++){
  for( j=0;j<c;j++){
    cout<<*(p + i*c +j)<<" ";
  }
  cout<<endl;
}
  • 方式二:额外声明临时指针用于遍历,原始指针保留初始地址用于释放:
cout<<"\nThe array elements are:"<<endl;
int *tmp = p;
for( i=0;i<r;i++){
  for( j=0;j<c;j++){
    cout<<*tmp<<" ";
    tmp = tmp +1;
  }
  cout<<endl;
}

两种方式都可以保证最后delete[] p时传入的是new[]返回的原始地址,不会触发内存释放错误。

内容的提问来源于stack exchange,提问作者Karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:03