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