使用Xcode的g ++创建动态分配的数组

时间:2015-11-15 06:22:42

标签: c++ ios xcode dynamic-arrays

所以,我最近尝试过这样做:

void Foo(int **bar, int size) {
    bar = new int *[size];
    for (int i = 0; i < size; i++)
        bar[i] = new int[4];
    // Do other stuff
    return;
}

int main(int argc, char *argv[]) {
    int ** data;
    int size = atoi(argv[1]);
    Foo(data, size);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < 4; j++)
            cout << "i = " << i << ", j = " << j << ", data = " << data[i][j] << endl;
        // Do other stuff
    }

    for (int i = 0; i < size; i++)
        delete[] data[i];
    delete[] data;
    return 0;
}

并且总是会在cout声明中得到段错误。更改代码以便在main中动态分配数组后,问题就消失了。因此,段错误之间的区别在于是否在同一函数中动态分配和销毁数组。这对我来说似乎不对,因为这不应该是传统C ++的问题。我正在使用带有Xcode的MacBook来获取g ++命令。任何人都可以确认Xcode的实现是否可以做到这一点?

2 个答案:

答案 0 :(得分:1)

它并不特定于Xcode或g ++ - 只是代码中的错误 - 您需要通过引用传递bar才能将其用作输出参数。

变化:

void Foo(int **bar, int size)

为:

void Foo(int ** &bar, int size)

请注意,一般来说,最好使用例如std::vector而不是数组等的裸C风格指针。

答案 1 :(得分:0)

您通过值将数据传递给Foo,因此当您在Foo中分配内存时,main()中的数据仍然未初始化。