C中结构内存申请如何释放
作为链表结构
typedef struct tag
{
char *No;
char *Name;
char *phoneNum;
struct tag *next;
}studentInfo;
用的时候申请
studentInfo *newStu = (studentInfo *)malloc(sizeof(studentInfo));
newStu->No = (char*)malloc(sizeof(NUM_LENGTH));
newStu->Name = (char *)malloc(sizeof(NUM_LENGTH));
newStu->phoneNum = (char *)malloc(sizeof(NUM_LENGTH));
那我释放的时候,尝试用这样释放不行
free(pCurrent->No);
free(pCurrent->Name);
free(pCurrent->phoneNum);
free(pCurrent);
具体该怎么做?谢谢
补充:整个删除函数
void DeleteStu(char *No)
{
studentInfo *pCurrent,*pre,*pTemp;
pre = Head;
pCurrent = Head->next;
while(pCurrent != NULL)
{
if(0 == strcmp(pCurrent->No,No))
{
pTemp = pCurrent;
pre->next = pCurrent->next;
printf("DELETE %s,%s,%s.\n",No,pCurrent->Name,pCurrent->phoneNum);
free(pTemp->No);
free(pTemp->Name);
free(pTemp->phoneNum);
free(pTemp);
return;
}
pre = pCurrent;
pCurrent = pCurrent->next;
}
printf("NOT EXIST.\n");
}
调试看就是只有No能释放掉,其他两个不行,但这两个指针都有值啊,这我搞不懂了啊
追问:这个是在删除中找到的节点,pCurrent也就是要删除的结点,我发现第一句没问题,到free(pCurrent->Name);就过不去了确定是有值的,Name和phoneNum都有值,我开始以为释放顺序有问题,但现在不知为什么到第二句就停那了,无法往下执行在补充问题中,请看一下这个pCurrent是另一个函数中的,应该没问题是的。。是两个函数中的变量
答案:代码不全,不好做判断
pCurrent 到底是怎么得到的?
其他:free(newStu->No);
free(newStu->Name);
free(newStu->phoneNum);
free(newStu);
上一个:string s; cout<<s[0]<<endl;合法吗
下一个:用C语言编写一个功能跟char* strcat(char*,const char*)相同的函数,即新定义的函数与stract函数功能相同