我在C(Ubuntu 10.10)中创建了一个UDP服务器。该服务器非常大,其中的一部分使用Strtok_r()进行了一些字符串处理[[以前我已成功使用此函数]]。当服务器第一次运行时,它会正确处理来自客户端的数据。但是,当其他客户端走来,并发送一些数据,程序崩溃,并显示以下信息:(!不管有多少客户[R如何来)malloc.c assertion在使用strtok_r时失败
MappingServer: malloc.c:3096: 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
如果我注释掉strtok_r()函数,则一切正常。这是造成该问题的代码是:
char delims[] = "/";
char* token = NULL;
char* separated_token[4];
int i,j;
char* last;
j = 0;
token = strtok_r(input_string, delims, &last);
while(token != NULL)
{
separated_token[j] = malloc(strlen(token) + 1);
strcpy(separated_token[j],token);
printf("%s ", separated_token[j]);
j++;
token = strtok_r(NULL, delims, &last);
}
至于我能理解,代码确定,它完美的第一个客户。我有点困惑,这个错误是什么意思?我用strtok()试过,结果是一样的。
断言的最可能原因是注销'malloc'd块的末尾。一种可能:是'seperated_token'还有'malloc'd?它足够长吗? – andrewdski
你需要给我们更多的代码来诊断..尽管如此,声音就像'separated_token'一样。 – Node
@用户佩佩我的宠物,但请给你的问题描述性的标题。 “C中的奇怪错误”告诉我们没有任何关于实际的问题。 – Bart