new和delete

品茶 2010-04-18 06:12:47

char *pstr=new char[];
char *pstrList[9];
for(int i=0;i<9;i++)*pstrList[i]=new char[];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)p[i]=new int[n];


问题:
这些对象都该怎么delete?
...全文
135 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
genlic 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 teatimel 的回复:]
C/C++ code

char *pstr=new char[];
char *pstrList[9];
for(int i=0;i<9;i++)*pstrList[i]=new char[];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)p[i]=new int[n];……
[/Quote]

楼主写的代码本身还有问题,*pstrList[i] = new char[];要改成pstrList[i] = new char[];
SuperFC 2010-04-18
  • 打赏
  • 举报
回复
虚心学习
liyanlin122 2010-04-18
  • 打赏
  • 举报
回复
char *pstr=new char[];
char *pstrList[9];
for(int i=0;i<9;i++)*pstrList[i]=new char[];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)p[i]=new int[n];

delete [] pstr;

for(i=0;i<9;i++)
delete [] pstrList[i];

for(i=0;i<9;i++)
delete [] p[i];

delete *p;
wade_2003 2010-04-18
  • 打赏
  • 举报
回复
数组的指针释放用delete[] p 不行吗?
要一个一个释放吗?
Doria2008 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 elegant87 的回复:]
C/C++ code

char *pstr=new char[]; //delelte pstr[];
char *pstrList[9]; //pstrList不是动态的,不能delete pstrList
for(int i=0;i<9;i++)
*pstrList[i]=new char[];
//for(int i=0;i<9;i……
[/Quote]
dukong123 2010-04-18
  • 打赏
  • 举报
回复
*pstrList[9]
用delete []pstrList
*pstr

delete pstr
ithiker 2010-04-18
  • 打赏
  • 举报
回复
for(int i=0;i<9;i++)*pstrList[i]=new char[];
要是数组,new分配的时候应该指定大小,不是,就应该去掉[],改为new char
sabflying 2010-04-18
  • 打赏
  • 举报
回复
*pstrList[9]
用delete []pstrList
*pstr

delete pstr
pengzhixi 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 teatimel 的回复:]
C/C++ code

char *pstr=new char[];
char *pstrList[9];
for(int i=0;i<9;i++)*pstrList[i]=new char[];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)p[i]=new int[n];……
[/Quote]

for(int i=0;i!=n;++i)
delete[]p[i];
delete[]p;
舉這個例子夠了
evel 2010-04-18
  • 打赏
  • 举报
回复

delete pstr;
pstr=NULL; //防止野指针
delete p;
p=NULL;
soswaidao 2010-04-18
  • 打赏
  • 举报
回复
友情帮顶,友情帮顶
elegant87 2010-04-18
  • 打赏
  • 举报
回复

char *pstr=new char[]; //delelte pstr[];
char *pstrList[9]; //pstrList不是动态的,不能delete pstrList
for(int i=0;i<9;i++)
*pstrList[i]=new char[];
//for(int i=0;i<9;i++)
// delete pstrList[i];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)
p[i]=new int[n];
//二维数组的释放
for(int i=0; i<n; i++)
delete p[i];
delete p;

野男孩 2010-04-18
  • 打赏
  • 举报
回复
凡是new[]的,就要delete[]
凡是new的,就要delete
把握这个原则就行了。

需要注意的是,由于编译器实现的不同,可能有的编译器用的时候会发现new[]的用delete直接释放,而不是用delete[],也能成功。这种做法是编译器的实现的问题,应该按照C++语言的标准,用正确的方式释放,才能确保用不同的编译器也总是正确的。
品茶 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gigglesun 的回复:]
for(int i=0;i<9;i++)*pstrList[i]=new char[];
要是数组,new分配的时候应该指定大小,不是,就应该去掉[],改为new char
[/Quote]
pstrList我是想定义为字符串数组,而我的疑问就在这里。
品茶 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengzhixi 的回复:]
引用楼主 teatimel 的回复:
C/C++ code

char *pstr=new char[];
char *pstrList[9];
for(int i=0;i<9;i++)*pstrList[i]=new char[];
int n=9;
int **p = new int*[n];
for(int i=0; i<n; i++)p[i]=new……
[/Quote]
高手能回答下15楼中我的一点疑问吗,谢谢了。
品茶 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 evel 的回复:]
C/C++ code

delete pstr;
pstr=NULL; //防止野指针
delete p;
p=NULL;
[/Quote]
谢谢提醒,但这不是本贴讨论重点。
zxniexin 2010-04-18
  • 打赏
  • 举报
回复
you qing bang ding!
品茶 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 elegant87 的回复:]
C/C++ code

char *pstr=new char[]; //delelte pstr[];
char *pstrList[9]; //pstrList不是动态的,不能delete pstrList
for(int i=0;i<9;i++)
*pstrList[i]=new char[];
//for(int i=0;i<9;i……
[/Quote]
事实上我也是这么做的。

有一点疑问:pstr和pstrList[i]都是char*都是new char[] 那为什么一个delete[]一个delete
品茶 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coding_hello 的回复:]
凡是new[]的,就要delete[]
凡是new的,就要delete
把握这个原则就行了。

需要注意的是,由于编译器实现的不同,可能有的编译器用的时候会发现new[]的用delete直接释放,而不是用delete[],也能成功。这种做法是编译器的实现的问题,应该按照C++语言的标准,用正确的方式释放,才能确保用不同的编译器也总是正确的。
[/Quote]
能具体点吗?

64,681

社区成员

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

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