日期:2014-05-16  浏览次数:20722 次

关于链表的奇怪问题
单向链表;表头由全局变量保存;下面分别是建立链表和打印链表的函数

//将文件名指针加入到链表
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掉,请问为什么会出现这种情况呢?好奇怪