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[]){
int *s;
f1(&

本文探讨了在C++中使用未分配内存的指针作为函数参数导致的问题。通过分析,指出直接传递指针会创建该指针的副本,导致在函数内部分配的内存无法在主函数中正确访问。提出两种解决方案:使用指向指针的指针或者通过函数返回值返回新分配的内存地址。
最低0.47元/天 解锁文章
3157

被折叠的 条评论
为什么被折叠?



