我试图通过将空指针传递给函数来初始化空指针,然后调用new
我为此创建了两个函数:
void Create1(int** temp)
{
*temp = new int(10);
}
void Create2(int *temp)
{
temp = new int(10);
}
int main()
{
int *data_1 = NULL;
int *data_2 = NULL;
Create1(&data_1);
Create2(data_2);
}
为什么Create1函数正确初始化data_1但Create2函数无法初始化data_2?
答案 0 :(得分:2)
您需要通过引用传递以获取您正在寻找的行为:
void Create2(int * &temp)
{
temp = new int(10);
}
答案 1 :(得分:1)
create1传递一个指向指针的指针,所以当你推迟它实际上是指定给传递的指针时,create2将它分配给一个局部变量,该变量超出了功能块末尾的范围,因此新操作分配了新的免费存储中的内存,由任何人指向,从而创建内存泄漏,解决此问题,传递对create2" int *& temp"的指针的引用。这样,实际将值赋给传递的指针
答案 2 :(得分:1)
这是因为Create1接收一个写入新指针值的位置,而Create2接收一个空指针,Create2内部的修改只修改用于保存该空指针的局部变量,而不会影响该函数之外的任何内容。
答案 3 :(得分:1)
因为在第二种情况下,您传递指针的值。即使您更改其值,该更改也不会传递回调用方。您实际上正在复制其价值。
在第一种情况下,您传递指针所在的地址。你正在写那个位置的东西。当呼叫者运行时,它可以看到你放在那里的东西。你告诉它某处所在的地方。该位置对于呼叫者和被呼叫者都是通用的。