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' 指向不同的位置;)
调用函数:
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' 指向不同的位置;)