二维指针指向二维数组的问题

koly_j 2009-12-10 10:40:15
#include <iostream>



int main(int argc , char* argv)
{
int array[3][3] = {
{0,1,0},
{1,1,1},
{0,1,0}
};
int **pArray = NULL;
pArray = new int*[3];
for (int k = 0 ; k < 10 ; ++k)
{
pArray[k] = new int [3] ;
}

pArray = (int**)array;
for(int i = 0 ; i < 3 ; ++i)
for (int j = 0 ; j < 3 ;++j)
{
// std::cout<<array[i][j]<<" ";
// std::cout<<*(*(array+i)+j)<<" ";
std::cout<<*(*(pArray+i)+j)<<" ";
// std::cout<<*(pArray+i*3+j)<<" ";
}
if(pArray!=0)
{
for (int k = 0 ; k < 3 ; ++k)
{
delete pArray[k];
}
delete pArray;
pArray = NULL;
}
return 0 ;
}


运行时显示内存访问错误,请高手指点下1
...全文
76 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijitop 2009-12-10
  • 打赏
  • 举报
回复
k<3
shijitop 2009-12-10
  • 打赏
  • 举报
回复
pArray = (int**)array;
应该是这句出了问题,
for(int m = 0 ; m < 3 ; ++m)
for (int n = 0 ; n < 3 ;++n)
{
pArray[m][n]=array[m][n];
}
我是新手,最笨的方法
koly_j 2009-12-10
  • 打赏
  • 举报
回复
我想用一个二维指针pArray来指向二维数组array,看看行不行。
  • 打赏
  • 举报
回复
如果是想拷贝数据就用memcpy.
但是你2维堆内存申请是有问题的,k应该<3
  • 打赏
  • 举报
回复
int **pArray = NULL;
pArray = new int*[3]; //只在堆上申请了3个int *指针
for (int k = 0 ; k < 10 ; ++k) //这里却给10个指针申请堆内存,应改为k<3
{
pArray[k] = new int [3] ;
}

pArray = (int**)array; //申请堆上的2维数组后,居然又将栈的数组赋给pArray ,导致之前申请的堆内存丢失。




真的不知道你的代码想干嘛!
hai040 2009-12-10
  • 打赏
  • 举报
回复
pArray = (int**)array;
这句是想memcpy吧
hai040 2009-12-10
  • 打赏
  • 举报
回复
pArray = (int**)array;
...
delete pArray[k];
...
delete pArray;

64,641

社区成员

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

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