请教各位,这段代码到底错在哪儿?
pasl 2005-12-08 07:52:37 short error=0,No=0,Num=0;
char **dj,DName[MAX_PATH]="\0";
switch(ljlx)
{
case 0: //塑料件
Num=7;
dj= (char **)malloc(Num);
for(No=0;No<Num;No++)
{
dj[No]=new char(5); //(char *)malloc(5);
sprintf(DName,"MT%d",No+1);
strcpy(dj[No],DName);
}
break;
case 1: //平冲件
Num=11;
dj=(char **)malloc(Num);
for(No=0;No<Num;No++)
{
dj[No]=(char *)malloc(11);
sprintf(DName,"ST%d",No+1);
strcpy(dj[No],DName);
}
break;
case 2: //成形件
Num=10;
dj=(char **)malloc(Num);
for(No=0;No<Num;No++)
{
dj[No]=(char *)malloc(15);
sprintf(DName,"FT%d",No+1);
strcpy(dj[No],DName);
}
break;
case 3: //机械件
Num=18;
dj=(char **)malloc( Num);
for(No=0;No<Num;No++)
{
ShowMsg("Malloc");
dj[No]=(char *)malloc(15);ShowMsg("Sprintf");
sprintf(DName,"IT%d",No+1);
strcpy(dj[No],DName);
ShowMsg(dj[No]);
ShowMsg(dj[0]);//在这一句中,运行到一定的No时候(有些机器中是5,有些机器中是17就为乱码,Num设置大一些时候,di[1],dj[3]也为乱码),ljlx=0,1,2也一样,其余的dj[1]到dj[Num-1]显示为正确
}
break;
}
switch(ljlx)
{
case 0: //塑料件
Num=7;
for(No=0;No<Num;No++) free(dj[No]); //free的时候内存出错,好像是内存访问冲突。
free(dj);
break;
case 1: //平冲件
Num=11;
for(No=0;No<Num;No++) free(dj[No]);
free(dj);
break;
case 2: //成形件
Num=10;
for(No=0;No<Num;No++) free(dj[No]);
free(dj);
break;
case 3: //机械件
Num=18;
for(No=0;No<Num;No++) free(dj[No]);
free(dj);
break;
}
请问对于Char **这类的变量,我这样释放内存,正确吗?应该如何释放才能避免内存泄漏?
刚刚接触C++不久,没有合适的参考资料,问题比较菜,可是困扰我很久了。谢谢帮忙。