添加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个字符的字符串,strlen(*linePtr)
返回24. realloc
返回的地址始终相同。
没有硬编码的数字,所以我不知道为什么它在相同数量的字符后总是失败。
*linePtr
在开头只有一个字节,我现在每次重新分配一个额外的字节。
编辑:
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;
}
EDIT2:
通过粘贴代码,我发现getLinePtr中存在一个错误:它返回最后一行而不是一个问题(使用y),但它不应该改变任何错误。并且只使用第一行。
答案 0 :(得分:0)
问题是我需要重新分配(strlen(* linePtr)+ 2)而不是(strlen(* linePtr)+ 1)。
strlen返回字符串的大小而没有终止空字符。所以我需要为它添加1,我需要为之后添加的字符添加1。
感谢Daniel Fisher的暗示。