C指向指针的指针的问题,非常感谢!!!

我是小贺 2008-10-31 05:50:16
#include <iostream>
using namespace std;
void main()
{
char** str = new char*[3];
str[0] = new char[20];
str[1] = new char[20];
str[2] = new char[20];
str[0] = "Nihao";
str[1] = "NihaoMa";
str[2] = "NihaoYa";
int i;
for(i=0; i<3; i++)
cout<<str[i]<<endl;
char** str1 = new char*[2];
str1[0] = str[0];
str1[1] = str[2];
for(i=0; i<2; i++)
cout<<str1[i]<<endl;
// delete str[1];
delete [] str;
str = str1;
/* for(i=0; i<2; i++)
delete str[i];*/
delete []str;
}
上面代码可以运行,
但是,一旦将两个注释处的其中任意一处去掉,将会出现问题,

VC++弹出一个对话框,显示如下:

Debug Assertion Failed!

Program: ...\数据库实验\NewDBS\Debug\MYDBS.exe
File: dbgheap.c
Line: 1044

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

麻烦各位帮我看看这是怎么一回事?
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
机智的呆呆 2008-10-31
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
void main()
{
char** str = new char*[3];
str[0] = new char[20];
str[1] = new char[20];
str[2] = new char[20];
str[0] = "Nihao"; //内存泄漏
str[1] = "NihaoMa";//内存泄漏
str[2] = "NihaoYa"; //内存泄漏
int i;
for(i=0; i <3; i++)
cout <<str[i] <<endl;
char** str1 = new char*[2];
str1[0] = str[0];
str1[1] = str[2];
for(i=0; i <2; i++)
cout <<str1[i] <<endl;
// delete str[1];//此时str[1]已不指向开始new的内存,delete出错
delete [] str;
str = str1;
/* for(i=0; i <2; i++)
delete str[i];*/
delete []str;
}
太乙 2008-10-31
  • 打赏
  • 举报
回复



strcpy(str[0] , "Nihao");
strcpy(str[1] , "NihaoMa");
strcpy(str[2] , "NihaoYa");

如果像lz那样,那么就是将str[0]指向了常量指针!肯定不对!


太乙 2008-10-31
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;
void main()
{
char** str = new char*[3];
str[0] = new char[20];
str[1] = new char[20];
str[2] = new char[20];
strcpy(str[0] , "Nihao");
strcpy(str[1] , "NihaoMa");
strcpy(str[2] , "NihaoYa");
int i;
for(i=0; i <3; i++)
cout <<str[i] <<endl;
char** str1 = new char*[2];
str1[0] = str[0];
str1[1] = str[2];
for(i=0; i <2; i++)
cout <<str1[i] <<endl;
// delete str[1];

delete[] str[0];
delete[] str[1];
delete[] str[2];

delete[] str1;

delete [] str;

}

65,211

社区成员

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

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