gpt4 book ai didi

c++ - 创建指向结构的指针数组 - C++

转载 作者:太空狗 更新时间:2023-10-29 20:42:15 25 4
gpt4 key购买 nike

我无法理解指向结构的指针数组。我创建了这个简单的例子来尝试更好地理解它们。虽然它可以编译,但我在下面显示的点上不断出现“BAD ACCESS”崩溃(无意义的指针)。谁能解释为什么这是错误的?

#include <iostream>
using namespace std;

struct complex_num {
double real_part;
double imag_part;
};

void init_complex(complex_num *element) {
element->real_part = -1.0; // <--- EXECUTION STOPS HERE.
element->imag_part = 1.0;
}

int main(int argc, char *argv[]) {
int n = 5;

complex_num *array[n]; // Allocates for an array of n pointers to
// the complex_num structure, correct?

for (int i = 0; i < n; i++) {
init_complex(array[i]);
}

return 0;
}

我知道有更好的方法可以做到这一点。我知道这是非常 C 的风格。请不要建议不同的数据结构。我特别好奇结构指针数组。谢谢!

最佳答案

您没有为您的 complex_num 对象分配内存,只是为一个带有指向它的指针的数组分配内存。因此,当您调用 init_complex 时,它会对指向无效位置的指针进行操作。

试试这个:

for (int i = 0; i < n; i++) {
array[i] = new complex_num();
init_complex(array[i]);
}

您的语句 complex_num *array[n] 创建了一个包含 n 个指向 complex_num 的指针的数组。意思是,该数组可以容纳 n 个指向 complex_num 的指针;但指针本身仍未初始化。它们指向随机位置 - C++ 中每个未初始化的原语(指针也属于)通常只包含分配前内存位置中的任何值。这几乎肯定会导致意想不到的结果,因为没有办法(或者至少没有相当简单的方法)告诉未初始化的指针指向哪里。

所以你必须让数组中的每个指针都指向一些正确设置的包含complex_num的内存位置;只有在那之后,您才应该访问(读取或写入)指针指向的 complex_num 中的值。使它例如指向动态分配的新 complex_num 对象,使用上面的代码(注意执行动态分配的 new 关键字)。

旁注:“原始”指针,指向动态分配的对象,如上所示,处理起来很棘手(完成后不要忘记调用 delete,否则会泄漏内存),因此推荐的做法通常是使用智能指针(如 std::shared_ptr,在 C++11 中引入)。

关于c++ - 创建指向结构的指针数组 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19374359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com