我想向函数发送一个空指针作为引用,然后在那里分配并初始化它
#include <iostream>
void foo(int*& p)
{
p = new int(20);
for (int i = 0; i < 20; ++i){
*(p+i) = i;
std::cout << *(p+i) << std::endl;
}
}
int main()
{
int* p = nullptr;
foo(p);
for (int i = 0; i < 20; ++i)
std::cout << *(p+i) << std::endl;
}
但是这段代码导致了一些非常奇怪的事情,结果是
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0
1
2
3
4
5
6
7
657975
668983
10
11
12
13
14
15
16
17
18
19
函数
foo
中的值是正确的,但在数组 main
和 v[7]
上的 v[8]
中具有奇怪的值。我无法理解它的行为。
实际上,您创建的不是 20 个
int
的数组,而是只有一个 int
;你必须写 p = new int[20];
来代替。
#include <iostream>
void foo(int*& p)
{
p = new int[20]; // we create an array of 20 ints
for (int i = 0; i < 20; ++i){
*(p+i) = i;
std::cout << *(p+i) << std::endl;
}
}
int main()
{
int* p = nullptr;
foo(p);
for (int i = 0; i < 20; ++i)
std::cout << *(p+i) << std::endl;
}