二维数组动态分配内存后还是出现内存访问bug???? 大家帮忙下。。

wzhenhua 2009-04-04 04:05:05
简略的代码如下:

template <class T>
void allocate2array(T **p,int row,int col)
{
p=new T*[row];
for(int i=0;i<row;i++)
p[i]=new T[col];
}

void main()
{
......
int **a;
allocate2array(a,m,n); //m,n已知
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=0; //到这一行的时候提示:读取位置。。。时发生访问冲突
}


如果直接把动态分配的代码放到main里面就没问题?????? 有区别吗!在我看来没有!
源代码中数组a的定义是在类的头文件中
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzhenhua 2009-04-04
  • 打赏
  • 举报
回复
看来还是基础不行,谢谢楼上各位了,分数有限,抱歉了!
Paradin 2009-04-04
  • 打赏
  • 举报
回复

int newmem(char *p)
{
p = new char[100];
memcpy(p, "I'm blind,not deaf");
}

int main()
{
char *p;
newmem(p);
printf("%s\n", p);
}

lz你说p有值么
wzhenhua 2009-04-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]

template <class T>
void allocate2array(T **&p,int row,int col)
{
p=new T*[row];
for(int i=0;i <row;i++)
p[i]=new T[col];
}

void main()
{

int m = 10;
int n = 4;
int **a;
allocate2array(a,m,n);  //m,n已知
for(int i=0;i <m;i++)
for(int j=0;j <n;j++)
a[i][j]=0;                // //到这一行的时候提示:读取位置。。。时发生访问冲突

cout < < " hello world" < < endl;

for(int i=0;i <…
[/Quote]

用指针没有传过去吗??参数是指针啊,我还以为肯定有值的?
wjksd 2009-04-04
  • 打赏
  • 举报
回复
程序本身有问题,你在void allocate2array(T **p,int row,int col)里分配的内容并没有传回主函数中,可以说你用的是值传递
  • 打赏
  • 举报
回复
template <class T>
void allocate2array(T **p,int row,int col)    //new的指针传给了p,但是没用传给实参,你得传引用啊
{
p=new T*[row];
for(int i=0;i<row;i++)
p[i]=new T[col];
}

void main()
{
......
int **a;
allocate2array(a,m,n); //m,n已知
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=0; //到这一行的时候提示:读取位置。。。时发生访问冲突
}
wuyu637 2009-04-04
  • 打赏
  • 举报
回复

template <class T>
void allocate2array(T **&p,int row,int col)
{
p=new T*[row];
for(int i=0;i<row;i++)
p[i]=new T[col];
}

void main()
{

int m = 10;
int n = 4;
int **a;
allocate2array(a,m,n); //m,n已知
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=0; // //到这一行的时候提示:读取位置。。。时发生访问冲突

cout << " hello world" << endl;

for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cout << a[i][j] << endl;;


}

=======================================


这个问题和下面这个很像,都是参数传递机制的误解


int change(int a, int b)
{
int temp = b;
b = a;
a = b;

}

void main()
{

int a= 1;
int b=2;
change (a,b);
}/// we can no change a, b use this function.

65,211

社区成员

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

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