我试图将两个二进制字符串相乘(每个字符串可以有不同的大小),而不会在任何步骤中将它们转换为整数。您可以找到我的代码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等)但仍然请帮我弄清楚这段代码中的错误(即使代码很长!)。
答案 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];
秒。那会给你带来这个错误。