添加 25 个字符后,Realloc 始终失败。
错误:
ld.so 检测到的不一致:dl-minimal.c: 116: realloc: Assertion `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个字符的字符串,strlen(*linePtr)
返回24。返回的地址realloc
总是一样的。
没有硬编码的数字,所以我不知道为什么它总是在相同数量的字符后失败。
*linePtr
是 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),但它不应该对此错误进行任何更改。并且只使用第一行。