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")" にすると、同じ問題が発生します。