25 文字を追加した後、Realloc が一貫して失敗します。
エラー:
ld.so によって検出された矛盾: dl-minimal.c: 116: realloc: アサーション `ptr == alloc_last_block' が失敗しました!
char** linePtr = getLinePtr(block, y);
char* tmpPtr = realloc(*linePtr, (strlen(*linePtr) + 1) * sizeof(char));
if (tmpPtr != NULL) {
*linePtr = tmpPtr;
strinsert(tmpPtr, ch, x);
}
直前に変数をチェックすると、すべて問題ないようです。*linePtr
は 24 文字の文字列を指し、24 をstrlen(*linePtr)
返します。返されるアドレスrealloc
は常に同じです。
ハードコーディングされた数字がないため、同じ文字数の後に常に失敗する理由がわかりません。
*linePtr
最初は 1 バイトでしたが、今のところ毎回 1 バイト余分に再割り当てしています。
編集:
char** getLinePtr(Block* block, int y)
{
assert(y >= block->start && y <= block->start + block->nb_lines);
if (y == block->start + block->nb_lines) {
block->lines = realloc(block->lines, (block->nb_lines + 1) * sizeof(char*));
*(block->lines + block->nb_lines) = malloc(sizeof(char));
block->nb_lines++;
}
return block->lines + block->nb_lines - 1;
}
編集2:
コードを貼り付けることで、getLinePtr にバグがあることに気付きました。(y を使用して) 要求された行ではなく最後の行を返しますが、このバグには何も変更しないでください。そして、最初の行だけが使用されます。