1 void myfunc(char** param){
2 ++param;
}
int main(){
3 char* string = (char*)malloc(64);
4 strcpy(string, "hello_World");
5 myfunc(&string);
6 myfunc(&string);
7 printf("%s\n", string);
// ignore memory leak for sake of quiz
8 return 0;
}
该程序应该打印什么?
A)hello_world
B)ello_world
C)llo_world
D)lo_world
E)非法内存访问,未定义的行为
我的解剖,一行一行。请校对,几周前我刚刚开始学习C,指针/内存管理开始了#34;点击"在我的大脑里!
现在,有几个问题。如何更改此代码以使b),c),d),甚至e)成为正确的答案?此外,他们正在谈论的内存泄漏是由于存在2"不同意"空字符后的内存字节,因为指针移位超过2个字节?如果不是,那是什么意思?
答案 0 :(得分:5)
功能
void myfunc(char** param){
++param;
}
不符合您的预期。它在本地修改param
,对调用函数中&string
的值没有影响。你需要使用:
void myfunc(char** param){
++(*param);
}
如果您想更改string
中main
指向的内容。
答案 1 :(得分:2)
并且存在内存泄漏,因为malloc(64)被调用但从未被释放。