Malloc 2372(错误)无法确定我的错误

时间:2016-09-03 08:27:04

标签: c malloc

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

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).

searched表示堆栈溢出时出现此错误但是过去三天我的代码中无法找出错误。我知道我的代码不是最好的(多次使用strlen等)但仍然请帮我弄清楚这段代码中的错误(即使代码很长!)。

1 个答案:

答案 0 :(得分:2)

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

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

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

的情况

因此我们需要j小于strlen(ans)。但j不可能小于strlen(ans)。吊杆。

1+来电中strlen(ans)之前添加malloc

顺便说一句,这段代码很难理解和调试。它到处都有内存泄漏。并且它不会跟踪const和什么不是assert。此外,没有评论。这使得调试代码需要很多经验。

至少添加 NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; NSArray *descriptors=[NSArray arrayWithObject: descriptor]; NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors]; 秒。那会给你带来这个错误。