c - Malloc 2372(错误)无法识别我错在哪里



我试图将两个二进制字符串(每个字符串都可以有不同的大小)相乘,而无需在任何步骤中将它们转换为整数。你可以在这里找到我的代码。它确实工作了很多次,但有时它会给我以下错误:

a.out: malloc.c:2372: 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.
Aborted (core dumped).

我在堆栈溢出上搜索此错误,但自过去三天以来一直无法找出代码中的错误。我知道我的代码不是最好的(使用strlen多次等),但仍然请帮助我找出这段代码中的错误(即使代码很长!)。

char *chut =malloc((strlen(ans))*sizeof(char));
int j=0;
for(j=0;j<strlen(ans);j++)
    chut[j]=ans[j+1];
chut[j]='';
return chut;

当我们分配chut时,我们分配了strlen(ans)字节。所以当我们做chut[j]='';时我们需要j小于strlen(ans)。(如果我们分配了三个,那么三个有效索引是0、1和2。因此,j必须小于strlen(ans)才能成为有效索引。

但循环条件是j<strlen(ans)。因此,如果我们退出循环,j<strlen(ans) .

不可能是

我们需要j小于strlen(ans)。但是j不可能小于strlen(ans)。繁荣。

malloc呼叫中strlen(ans)前添加1+

顺便说一下,这段代码非常难以理解和调试。它到处都有内存泄漏。它也不知道什么是const,什么不是。此外,也没有评论。这使得调试代码需要大量的经验。

至少要添加assert s。

相关内容

  • 没有找到相关文章

最新更新