realloc() 时指针无效

Invalid Pointer while realloc()

调用函数:

void caller_func(){
    char *c = malloc(strlen("Hi") + 1);
    c = "Hi"; //c is a pointer char*
    char **s = &oi; //s is a pointer to a pointer: char **;
    called_func(s, 3, 'A');
}

调用函数

void called_func(char **s, int p, char c){
        char *w = *s; //w = oi ?!
        size_t len = strlen(w);
        if(w[p] == '[=11=]'){
           w = realloc(w, len+1); // ERROR HERE. INVALID POINTER
        }  
    }

我知道我应该使用一个临时变量。这样,如果 realloc 失败,我仍然会释放原始值。这只是一个测试。
它给了我 Invalid Pointer 0x0000232*** 错误。

char *c = malloc(strlen("Hi") + 1);

你分配了 3 个字节。

c = "Ola"; //c is a pointer char*

您将 c 更改为指向其他地方并丢失了您之前分配的内容。了解 strcpy.

另外 "Ola"(带有空终止符)不适合 3 个字节的缓冲区。

执行以下操作:

strcpy(c, "Hi"); // Instead of c = "Hi". Using strcpy() you are copying into   

                 // the memory allocated via malloc().

realloc() 现在将按预期工作,因为 'w' 现在将指向

最初通过 malloc() 分配的内存。

(如果它让您感到困惑,请将其画在纸上...您会很快注意到在执行 c = "Hi" 之后 'c' 指向不同的位置;)