请教各位,这段代码到底错在哪儿?

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++不久,没有合适的参考资料,问题比较菜,可是困扰我很久了。谢谢帮忙。
...全文
184 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpig 2005-12-11
  • 打赏
  • 举报
回复
呵呵
那你找本讲C++ std的书看看了
楼上的 这种方式纯粹的c的代码,c++里还是不要推荐了,不过也该是楼主所熟悉的 呵呵
zscpsoft 2005-12-09
  • 打赏
  • 举报
回复
其实错就错在这一行上
Num=18; dj=(char **)malloc(Num);
知道为什么吗?这需要点底层知识,因为char*在32位机上是占用4个字节的,也就是一个DWORD值,而你分配的空间(18个字节)不够用来存放18个char*的指针(在32位机上也就是18*4=52个字节),这也就是症结所在了,把它改成:dj=(char **)malloc(Num*sizeof(char*));就OK了! :)
pasl 2005-12-09
  • 打赏
  • 举报
回复
vc不懂亚!谁能办我解决一下。回答以下上面的两个问题。
谢谢了。
最好能够提出具体问题所在。
或者更好的实现办法。

To:hpig(喜猪)
std中的vector<string>怎么用?我不清楚,我还没有看过一整本的VC++.net的资料。
/...害羞中
hpig 2005-12-08
  • 打赏
  • 举报
回复
这样的代码 看的眼晕 呵呵
你别用 char** 这样的可变array了
请使用 std中的vector<string>吧 :)
总比这样看的舒服 呵呵
pasl 2005-12-08
  • 打赏
  • 举报
回复
这是在一个软件的二次开发中的,生成结果是一个DLL文件。在exe文件中是正常的

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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