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

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:01:17
先看一下代码:
#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 yo


str[0] = "Nihao";
str[1] = "NihaoMa";
str[2] = "NihaoYa";
改成
strcpy(str[0], "Nihao");
strcpy(str[1], "NihaoMa");
strcpy(str[2], "NihaoYa");
就OK啦!
不客气!

delete []是与new[]配对的,你用了new[]声明,只能用delete []删除整个数组空间,而不能用delete一个一个删除。

你好
你好吗
你好呀
这程序很搞笑