首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

关于链表的奇怪有关问题

2013-07-24 
关于链表的奇怪问题单向链表;表头由全局变量保存;下面分别是建立链表和打印链表的函数//将文件名指针加入

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

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


[解决办法]
多线程并发的问题?一个访问,一个删?

热点排行