这个问题比较隐蔽.
#include "stdafx.h"
#include "1.h"//定义了结构体
#include <iostream>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
plant p1;
p1.p_flower=new flower[10];
p1.num=10;
char a[10];
for (int i=0;i<10;i++)
{
p1.p_flower[i].name=new char[20];
strcpy(p1.p_flower[i].name,"aa");
//要用strcpt而不能直接赋值;如果p1.p_flower[i].name="aa"会导致这样的问题:
//1)给p1.p_flower[i].name分配的空间成了没有指针指向的垃圾地址,地址泄露发生了
//2)p1.p_flower[i].name这个指针指向了常量区,无法进行后面的delete操作
strcpy(p1.p_flower[i].color,"bb");
}
for (int j=0;j<10;j++)
cout<<"第"<<j<<"个植物是:"<<p1.p_flower[j].name
<<" 颜色是:"<<p1.p_flower[j].color<<endl;
for (int k=0;k<10;k++)
{
delete[] p1.p_flower[k].name;//一个new 对应一个delete
cout<<k<<"个植物被析构\n";
}
delete[] p1.p_flower;
system("pause");
return 0;
}
Reference:http://zhidao.baidu.com/question/81948054.html