使用给定的非空指针值成功调用realloc
后,不允许继续使用传递给realloc
的指针值。您需要改用realloc
返回的值。
我想将两个缓冲区合并为一个
int BBB(char *dest,int sz,char *sour,int s_sz)
{
if((dest=realloc(dest,sz+s_sz))==NULL)//
{
perror("realloc");
}
for (size_t i = 0; i < s_sz; i++)
{
*(dest + sz +i)=*(sour+i);
}
return sz+s_sz ;
}
上面的代码在组合小增益时效果很好,但是当我反复称该错误时>>
:malloc: *** error for object 0x7ff8cf009800: pointer being realloc'd was not allocated
已返回,调试信息
dest:0x0000000103008200 "HTTP/1.1 200 OK\r\nBdpagetype:... sz:33792 s_sz:1024
下面是我的主要功能。
do{ r_n=recv(sfd,rbuff,BUFSIZ,0); BBB(rdata,nbuff,rbuff,BUFSIZ); memset(rbuff,0,BUFSIZ); nbuff+=BUFSIZ; } while (r_n);
感谢兄弟,所以我想知道如何解决它?
我想将两个缓冲区合并为一个int BBB(char * dest,int sz,char * sour,int s_sz){if((dest = realloc(dest,sz + s_sz))== NULL)// {perror (“重新分配”); } for(size_t i = 0; i <...>
使用给定的非空指针值成功调用realloc
后,不允许继续使用传递给realloc
的指针值。您需要改用realloc
返回的值。
您正在将返回值从realloc
分配给local
dest
,因此在调用代码中,rdata
将保持不变。因此,取决于您最初是否将rdata
设置为NULL
,在第二个循环迭代中,rdata
仍为NULL
或无效。在前一种情况下,您的下一个realloc
调用将创建一个新的不相关分配,而前一个调用将被泄漏;在后一种情况下,您通过将无效指针再次传递给realloc
导致了不确定的行为。
此外,不能将realloc
的返回值分配给传入的同一指针,因为这可能会导致内存泄漏。如果realloc
由于任何原因失败,它将返回一个空指针,并且如果您将其分配给指向原始分配的唯一指针,那么您将没有任何办法来达到原始分配(在[[ C0]失败)。
使用给定的非空指针值成功调用realloc
后,不允许继续使用传递给realloc
的指针值。您需要改用realloc
返回的值。