为什么 realloc 创建两个不同的指针?

Why does realloc create two different pointers?

我有一个名为 **lines 的指针数组,每行 100 个字符长。

并且有一个函数可以将字符添加到任何给定的行并在行不够大时重新分配该行:

void add_letter(char *line, int pos, char letter) {
    if(strlen(line) % 100 == 0){
        line = realloc(line, sizeof(char) * strlen(line) + 100);
    }
    ...

add_letter 是这样调用的:

add_letter(lines[0], pos, ch);
这里的

行等于lines[0],在第二行,gdb returns 1 for p line == lines[0]。 这里 linelines[0] 都在内存位置 0x6465e0.

但是在realloc调用之后,line变成了0x648200,但是lines[0]保持不变,变成了一个""空字符串。

是什么原因导致 realloc 出现这种情况?由于这个原因,strcat(line, newline)newline 作为加法的最终结果在函数末尾不起作用。

你错了:

Here line and lines[0] are both in memory location 0x6465e0.

两个变量都有0x6465e0,但它们位于不同的位置。 当您使用 line 调用 realloc 时,运行时会释放 line 指向的内存(即 0x6465e0),分配新内存并将其地址放入 line -即 0x648200Value of lines[0] 不受此操作影响,但它指向的内存已被释放。 底线——如果你重新分配,你需要用新位置

更新指向旧位置的所有指针

希望对您有所帮助