Mad*_*art 2 c++ arrays pointers function new-operator
我正在玩C++,我偶然发现了这个问题.我正在尝试初始化堆上的数组指针,并且它initialize()在输出的内部工作69,但是在main()它中,它与错误一起崩溃EXC_BAD_ACCESS.
#include <iostream>
void initialize(int* array, int size) {
array = new int[size];
// Testing
array[2] = 69;
std::cout << array[2] << std::endl; // Works fine
}
int main() {
int size = 3;
int* array;
// Initializing
initialize(array, size);
// Testing
std::cout << array[2] << std::endl; // Crash, EXC_BAD_ACCESS
// Cleanup
delete[] array;
array = nullptr;
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
请帮我理解这个问题.
是的,我知道我应该使用,std::vector但我想了解为什么这不起作用:)
cad*_*luk 16
传递array给函数时,会生成该指针的副本.当你指定new int[size];时array,你实际上将它分配给参数,这是我正在谈论的副本.要真正修改array定义的main,请使用引用.将函数的定义更改为
void initialize(int*& array, int size)
Run Code Online (Sandbox Code Playgroud)
或返回指针,如1
int* initialize(int size)
Run Code Online (Sandbox Code Playgroud)
然后再试一次.
我推荐第二种方法,因为它具有更高的表现力:类似于
initialize(array, 3);
Run Code Online (Sandbox Code Playgroud)
不清楚是否array被修改.OTOH,
int* array = initialize(3);
Run Code Online (Sandbox Code Playgroud)
确实.
@Jack在对此答案的评论中指出1