c++ 踩坑记录,如何正确的对指针参数new空间
问题
将指针传入函数,在函数中为指针new一块空间,发现函数中指针发生改变,但原指针未变化。
代码:
#include <iostream>
void foo(int* a)
{
a = new int(1);
std::cout << "a = " << *a <<"\n";
}
int main()
{
int* p = nullptr;
foo(p);
std::cout << "p = " << *p;
}
输出结果(g++下)
a = 1
Segmentation fault
为什么会产生这个问题,如何解决这个问题
如果我们传入的p是一个int型变量,那么a只是p的一个副本,想要通过改变a来改变p,我们就需要传入a的地址,直接修改这个地址中的内容,也就是所谓的穿指针,再通过指针修改变量。类比发现,那我们想通过函数修改指针变量,也应该传入这个指针的地址,也就是所谓的指向指针的指针。
所以代码应该改为下面这样子
#include <iostream>
void foo(int** a)
{
*a = new int(10);
std::cout << "a = " << **a <<"\n";
}
int main()
{
int* p = nullptr;
foo(&p);
std::cout << "p = " << *p;
}
收工!

浙公网安备 33010602011771号