作者zptdaniel ()
看板C_and_CPP
标题[问题] C++ 用new动态配置记忆体之後无法用delete删除
时间Thu Mar 19 00:10:41 2009
http://rafb.net/p/fzOZWw61.html
这是C++ primer plus当中的一题练习题
我在set()当中使用new动态配置记忆体之後
应该要在main的最後把先前配置的记忆体delete掉
但我只要加上 delete [] pt; 就没办法正常结束执行
请问版上的高手们是我的语法用错了吗?
谢谢!
------------------------------
这是题目的限制..刚忘记跟程式码PO在一起
set(beany, testing);
//first argument is a reference,
//allocates space to hold copy of testing,
//sets str member of beany to point to the new block,
//copies testing to the new block,
//and sets ct member of beany
--
我以为远方 会有新的风景
却在每一个异地 流浪回望着记忆
"For the way I live" by Tizzy Bac
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.100.216
1F:→ xam:#38 ps = s2; 03/19 00:15
2F:→ zptdaniel:可以请楼上告诉我要怎麽改吗@@? 我不知道该怎麽做||| 03/19 00:20
3F:→ akasan:s1.str[n+1]='\0'; 03/19 00:21
4F:→ zptdaniel:改成 *ps = *s2 吗? 03/19 00:21
5F:→ akasan:阵列a[n] 能用的范围是a[0~n-1] 03/19 00:21
6F:→ akasan:那边用用strcpy 03/19 00:22
7F:推 QQ29:就1F所说的 你ps=s2 已经 mem leak了 已经找不回原先ps new的 03/19 00:23
8F:→ QQ29:而你现在ps指到的是testin[] 是一个静态阵列 不能delete阿 03/19 00:24
9F:推 saxontai:s1.str = new char[strlen(s2)]; 03/19 00:31
10F:→ saxontai:strcpy(s1.str, s2); 03/19 00:32
11F:→ saxontai:或 sprintf(str.s1, "%s", s2); 03/19 00:33
※ 编辑: zptdaniel 来自: 123.194.100.216 (03/19 00:37)
12F:→ zptdaniel:原来可以这样写啊@@ 懂了 谢谢各位^^ 03/19 00:38
13F:推 saxontai:s1.ct = strlen(s2); 03/19 00:39
14F:→ saxontai:s1.str = new char[s1.ct * sizeof(char)]; 03/19 00:40
15F:→ zptdaniel:请问,new char[s1.ct]跟new char[s1.ct * sizeof(char)] 03/19 00:54
16F:→ zptdaniel:两个都可以执行,但是差别在於哪里呢? 03/19 00:54
17F:→ zptdaniel:这好像是个很蠢的问题@@ 03/19 00:55
18F:→ zptdaniel:是後者配置的记忆体空间较大? 03/19 00:55
19F:推 saxontai:呃,我搞笑,用到 C 的习惯了 XD new char[s1.ct]; 就好 03/19 00:58
20F:→ zptdaniel:喔~了解! 谢谢saxontai! 03/19 01:03