数组初始化函数

时间:2015-10-20 17:49:55

标签: c++ arrays function pointers new-operator

我正在玩C ++,我偶然发现了这个问题。我正在尝试初始化堆上的数组指针,它在initialize()内部工作,在其中输出69,但在main()中,它与错误{{1}崩溃}}

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; } ,但我想了解为什么这不起作用:)

3 个答案:

答案 0 :(得分:16)

array传递给函数时,会生成该指针的副本。当您将new int[size];分配给array时,您实际将其分配给参数,这是我正在讨论的副本。要真正修改array中定义的main,请使用引用。将函数的定义更改为

void initialize(int*& array, int size)

或返回指针,如 1

int* initialize(int size)

再试一次。

我推荐第二种方法,因为它具有更高的表现力:类似

initialize(array, 3);

无法明确array是否被修改。 OTOH,

int* array = initialize(3);

确实

@Jack在对此答复的评论中指出

1

答案 1 :(得分:0)

程序失败的原因是因为您希望在初始化函数之外分配内存以及在该内存上运行的函数。

只需从您的函数中删除 new 语句,使其看起来像这样......

output

...然后,在main函数调用之前进行分配...

&&

答案 2 :(得分:0)

传递指针的地址以避免错误消息