使用 Xcode 的 g++ 创建动态分配的数组
Creating dynamically allocated arrays using Xcode's g++
所以,我最近尝试这样做:
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++ 的问题。我正在为 g++ 命令使用带 Xcode 的 MacBook。任何人都可以确认 Xcode 的实现是这样做的吗?
这不是 Xcode 或 g++ 特有的 - 只是您代码中的一个错误 - 您需要通过引用传递 bar
才能将其用作输出参数。
变化:
void Foo(int **bar, int size)
至:
void Foo(int ** &bar, int size)
请注意,通常最好使用例如std::vector
而不是数组等的裸 C 风格指针
你通过值将数据传递给Foo,所以当你在Foo内部分配内存时,main()中的数据保持未初始化。
所以,我最近尝试这样做:
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++ 的问题。我正在为 g++ 命令使用带 Xcode 的 MacBook。任何人都可以确认 Xcode 的实现是这样做的吗?
这不是 Xcode 或 g++ 特有的 - 只是您代码中的一个错误 - 您需要通过引用传递 bar
才能将其用作输出参数。
变化:
void Foo(int **bar, int size)
至:
void Foo(int ** &bar, int size)
请注意,通常最好使用例如std::vector
而不是数组等的裸 C 风格指针
你通过值将数据传递给Foo,所以当你在Foo内部分配内存时,main()中的数据保持未初始化。