void f1(int * p){
p = (int *)new int[5];
}
int main(int argc, char* argv[]){
int *s;
f1(s);
*s = 10;
cout<<*s<<endl;
return 0;
p = (int *)new int[5];
}
int main(int argc, char* argv[]){
int *s;
f1(s);
*s = 10;
cout<<*s<<endl;
return 0;
}
这个程序,编译可以通过,提示*s未初始化,运行是就会出错了。原因是*p实际上是s的一个副本,p申请了新内存,但s并没有改变。至于为什么是一个副本,占时还不清楚。
更改方法:采用指向指针的指针
void f1(int ** p){
*p = (int *)new int[5];
}
int main(int argc, char* argv[]){