我正在尝试在 C 中使用 strdup() 函数,但遇到了一个涉及 malloc 的奇怪错误。我的精简代码是:
void loadEntity(FILE *inFP, entity_t *ent, char *token) {
char buffer[100] = "buffer";
if (strcmp(token, "name") == 0) {
if (fscanf(inFP, "%s", buffer) != 1) {
fprintf(stderr,"%s\n", "Error reading name.");
exit(1);
}
//For testing purposes
fprintf(stdout, "Buffer: %s", buffer);
ent -> name = strdup(buffer);
}
}
结果是:
hw6: malloc.c:2451: 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.
缓冲区:plane1Aborted(核心转储)
在结果的最后,您可以看到我的 fprintf 语句 (Buffer: plane1) 的结果,这正是它应该的样子。我输入文本的第一行是“name plane1”。所以基本上,它是查看令牌名称,获取下一个单词,然后将 ent -> name 设置为此。看起来很简单,但它不起作用。请注意,即使我删除了 if 语句,它也有相同的结果。此外,如果我将其设为“strdup("String")”,我也会遇到同样的问题。