当前位置: 技术问答>linux和unix
关于链表的奇怪问题
来源: 互联网 发布时间:2017-04-17
本文导语: 单向链表;表头由全局变量保存;下面分别是建立链表和打印链表的函数 //将文件名指针加入到链表 HI_U8 AddH264FileInList(HI_U8 *p) { FileNode *fp = NULL,*sp = NULL; if(pFileHead == NULL){ pFileHead = (FileNode *)ma...
单向链表;表头由全局变量保存;下面分别是建立链表和打印链表的函数
//将文件名指针加入到链表
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--************-%08xn",pFileHead,pFileHead->next);
printFileName();
printf("address:%08x---%08x--0n",pf,pFileHead);
pf = pFileHead;
printf("address:%08x---%08x--1n",pf,pFileHead->next);
printFileName();
if(pFileHead->next != NULL){
printf("address:%08x---%08xn",pFileHead,pFileHead->next);
pFileHead = pFileHead->next; //从链表删除已经发送完毕的文件
………………
}
函数打印的指针地址和文件名都是正确的,但是用printf("address:%08x---%08x--1n",pf,pFileHead->next); 这条语句打印总显示pFileHead->next引用非法内存,所以当运行至if(pFileHead->next != NULL){
……时候程序被kill掉,请问为什么会出现这种情况呢?好奇怪
//将文件名指针加入到链表
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--************-%08xn",pFileHead,pFileHead->next);
printFileName();
printf("address:%08x---%08x--0n",pf,pFileHead);
pf = pFileHead;
printf("address:%08x---%08x--1n",pf,pFileHead->next);
printFileName();
if(pFileHead->next != NULL){
printf("address:%08x---%08xn",pFileHead,pFileHead->next);
pFileHead = pFileHead->next; //从链表删除已经发送完毕的文件
………………
}
函数打印的指针地址和文件名都是正确的,但是用printf("address:%08x---%08x--1n",pf,pFileHead->next); 这条语句打印总显示pFileHead->next引用非法内存,所以当运行至if(pFileHead->next != NULL){
……时候程序被kill掉,请问为什么会出现这种情况呢?好奇怪
|
多线程并发的问题?一个访问,一个删?