【发布时间】:2015-05-12 20:59:27
【问题描述】:
调用函数:
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] == '\0'){
w = realloc(w, len+1); // ERROR HERE. INVALID POINTER
}
}
我知道我应该使用临时变量。这样,如果重新分配失败,我仍然释放原始值。这只是一个测试。
它给了我Invalid Pointer 0x0000232*** 错误。
【问题讨论】:
-
1.分配给变量时,您会更改其值。 2. 因此,当您分配给指针时,您会更改其值。 3. 但是指针的值是地址。它是指针指向的内存地址。 4. 所以当你分配一个指针时,你改变了它指向的地址。 5.
c是一个指针。当您分配给c(即您对c =进行任何操作)时,它会停止指向之前指向的内容,并开始指向您分配给它的新地址。所以,c = "Hi"使它指向一个新地址,而不是之前指向的地址。 -
您知道我们甚至不知道
oi是什么,不是吗?所以整个sn-p都是废话。总的来说,你不必分配内存,让一个指针指向它,然后让指针指向一个字符串文字,什么是有效的让你使用分配的内存块的轨道。 -
另外:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括期望的行为、特定的问题或错误以及最短的在问题本身中重现它所必需的代码。 没有明确的问题陈述的问题对其他读者没有用处。 -> 我无法从那个 sn-p 重现错误。我只能看到其他错误/失败。所以这是题外话。