关于链表的奇怪问题
单向链表;表头由全局变量保存;下面分别是建立链表和打印链表的函数
//将文件名指针加入到链表
HI_U8 AddH264FileInList(HI_U8 *p)
{
FileNode *fp = NULL,*sp = NULL;
if(pFileHead == NULL){
pFileHead = (FileNode *)malloc(sizeof(FileNode)); //申请新节点
if(pFileHead == NULL){
printf("Malloc Ram fatled!~\n");
return 0;
}
//memset(pFileHead,0,sizeof(FileNode));
memcpy(pFileHead->name,p,27); //拷贝文件名到链表
pFileHead->next = NULL;
return 1;
}
fp = pFileHead;
while(fp->next != NULL){
fp = fp->next;
}
sp = (FileNode *)malloc(sizeof(FileNode));
if(sp == NULL){
perror("Malloc");
return 0;
}
sp->next = NULL;
fp->next = sp;
memcpy(sp->name,p,27);
return 1;
}
这是在其中一个线程里对建立的文件打印显示,在另外一个net线程对文件进行发送,问题来了:
printf("address:%08x--************-%08x\n",pFileHead,pFileHead->next);
printFileName();
printf("address:%08x---%08x--0\n",pf,pFileHead);
pf = pFileHead;
printf("address:%08x---%08x--1\n",pf,pFileHead->next);
printFileName();
if(pFileHead->next != NULL){
printf("address:%08x---%08x\n",pFileHead,pFileHead->next);
pFileHead = pFileHead->next; //从链表删除已经发送完毕的文件
………………
}
函数打印的指针地址和文件名都是正确的,但是用printf("address:%08x---%08x--1\n",pf,pFileHead->next); 这条语句打印总显示pFileHead->next引用非法内存,所以当运行至if(pFileHead->next != NULL){
……时候程序被kill掉,请问为什么会出现这种情况呢?好奇怪