在运行pc上运行完好,但是在linux就出现了 malloc.c:2451有关问题,求大神解答
在运行pc上运行完好,但是在linux就出现了 malloc.c:2451问题,求大神解答
//==================================长度84(1个字节)+地址(3个字节)+128个字节数据+校验位(1个字节)组成一条报文放到新列表中
L4=(LinkList)malloc(sizeof(LNode));//开辟头结点,链表3
L5=L4;
char TempStr[265]="";
char str7[257]="";
char str5[265]="";
char *record;
char tmp[2];
long checksum=0;
int count=strlen(buffer)/256;
int b,c;
int LinkList_Count=0;
for (i=0;i<count;i++)
{
LinkList TempData;
TempData=(LinkList)malloc(sizeof(LNode));
TempData->m_Data=(BYTE *)malloc(sizeof(BYTE)*133);
TempData->m_Data[0]=132;
b=(int)TempData->m_Data[0];
c=(int)AddrGroup[0]+0x80*i;
sprintf(str5,"%02X%06X",b,c);
str5[8]='\0';
substrcpy(buffer,str7,0,256);//取出从0开始的256个字符
strcat(str5,str7);
strcpy(TempStr,str5);
char *str8=(char*)malloc(sizeof(char)*(strlen(buffer)-255));
substrcpy(buffer,str8,256,strlen(buffer)-256);//
strcpy(buffer,str8);
free(str8);
record=TempStr;
int k=0;
for(j=0;k<132;k++,j+=2)
{
strncpy(tmp,record+j,2);
sscanf(tmp,"%02X",&TempData->m_Data[k]);
checksum=checksum+TempData->m_Data[k];
}
TempData->m_Data[132]=0xFF-checksum&0xFF; //计算校验码
checksum=0;
L5=Creat_LinkListR(TempData,L5);
LinkList_Count++;
}
前面的程序都运行正常,运行到这里就提示
zaixianshengji: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
程序运行到这里就不能跑了,我检查了好几遍程序,感觉都没错,请大神指导我一下,如果程序哪里没有看懂的,或者需要其他信息,请留言
------解决思路----------------------
在 malloc 加 是否为 NULL 判断 , count sizeof(LNode) sizeof(BYTE)*133) 多大,内存够用吗
------解决思路----------------------
1. 首先定位到是运行到哪个 malloc 程序崩溃;
2. L4=(LinkList)malloc(sizeof(LNode)); 结构体 LinkList 的空间 肯定 大于 LNode ;
改为
(LinkList)malloc(sizeof(LinkList));
//==================================长度84(1个字节)+地址(3个字节)+128个字节数据+校验位(1个字节)组成一条报文放到新列表中
L4=(LinkList)malloc(sizeof(LNode));//开辟头结点,链表3
L5=L4;
char TempStr[265]="";
char str7[257]="";
char str5[265]="";
char *record;
char tmp[2];
long checksum=0;
int count=strlen(buffer)/256;
int b,c;
int LinkList_Count=0;
for (i=0;i<count;i++)
{
LinkList TempData;
TempData=(LinkList)malloc(sizeof(LNode));
TempData->m_Data=(BYTE *)malloc(sizeof(BYTE)*133);
TempData->m_Data[0]=132;
b=(int)TempData->m_Data[0];
c=(int)AddrGroup[0]+0x80*i;
sprintf(str5,"%02X%06X",b,c);
str5[8]='\0';
substrcpy(buffer,str7,0,256);//取出从0开始的256个字符
strcat(str5,str7);
strcpy(TempStr,str5);
char *str8=(char*)malloc(sizeof(char)*(strlen(buffer)-255));
substrcpy(buffer,str8,256,strlen(buffer)-256);//
strcpy(buffer,str8);
free(str8);
record=TempStr;
int k=0;
for(j=0;k<132;k++,j+=2)
{
strncpy(tmp,record+j,2);
sscanf(tmp,"%02X",&TempData->m_Data[k]);
checksum=checksum+TempData->m_Data[k];
}
TempData->m_Data[132]=0xFF-checksum&0xFF; //计算校验码
checksum=0;
L5=Creat_LinkListR(TempData,L5);
LinkList_Count++;
}
前面的程序都运行正常,运行到这里就提示
zaixianshengji: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
程序运行到这里就不能跑了,我检查了好几遍程序,感觉都没错,请大神指导我一下,如果程序哪里没有看懂的,或者需要其他信息,请留言
------解决思路----------------------
在 malloc 加 是否为 NULL 判断 , count sizeof(LNode) sizeof(BYTE)*133) 多大,内存够用吗
------解决思路----------------------
1. 首先定位到是运行到哪个 malloc 程序崩溃;
2. L4=(LinkList)malloc(sizeof(LNode)); 结构体 LinkList 的空间 肯定 大于 LNode ;
改为
(LinkList)malloc(sizeof(LinkList));