C++ new和delete使用求助!

lishude1985 2013-04-11 01:13:17
/*
* 说明:用指针、new、delete实现一个字符串数组;
*
* 可提供其他方案;
*
* 感谢解答!
*
*/


#include <iostream>

using namespace std;


void main() //vs2008 控制台程序
{

int k=0;

char **ppchA=new char*[20];

for (k=0; k<20; k++)
{

ppchA[k] = new char[50];

ppchA[k]="Hello world!";

printf("%d,%s", k, ppchA[k]);

}

for (k=19; k>-1; k--)
{

delete [] ppchA[k]; //经调试,该地方出错

}

delete [] ppchA ;


}

提示以下错误:

...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
csd1208 2013-04-11
  • 打赏
  • 举报
回复
ppchA[k]="Hello world!";// 这个地方有问题,你这样定义的话,那么久不能修改该数组的元素了,因为字面值字符串"Hello world"存储常量区,而常量区内的东西 是不能修改的
海的神话 2013-04-11
  • 打赏
  • 举报
回复
注释掉
//for (k=19; k>-1; k--)
//{

//delete [] ppchA[k]; //经调试,该地方出错

//}

delete /*[] */ppchA ;

经过输出地址发现ppchA 【k】实际上都是同一个地址
void main() //vs2008 控制台程序
{

int k=0;

char **ppchA=new char*[20];

for (k=0; k<20; k++)
{

ppchA[k] = new char[50];

ppchA[k]="Hello world!";

printf("%d,%s", k, ppchA[k]);
printf("%p\n",ppchA[k]);
}

//for (k=19; k>-1; k--)
//{

//delete [] ppchA[k]; //经调试,该地方出错

//}

delete /*[] */ppchA ;

}


yhuib 2013-04-11
  • 打赏
  • 举报
回复
ppchA[k]="Hello world!"; 这句有问题。 ppchA[k]是指针,这句导致修改了指针,指向的是一个预分配的空间,而不是用new分配的空间,delete的时候自然就出错了。应该用strcpy(ppchA,"Hello world!");
小黑小宝 2013-04-11
  • 打赏
  • 举报
回复
引用 1 楼 lxb287483590 的回复:
ppchA[k]="Hello world!";// 这个地方出错 ,ppchA[k]指向的地方是字符串常量,不能被改变释放
可以用strcpy(ppchA[A], "Hello world!")才能拷贝数据。 如果是你这样复制,会使ppchA[A]指向的地址发生改变,就不会指向你刚new的地址
小黑小宝 2013-04-11
  • 打赏
  • 举报
回复
ppchA[k]="Hello world!";// 这个地方出错 ,ppchA[k]指向的地方是字符串常量,不能被改变释放

64,654

社区成员

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

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