【发布时间】:2021-06-27 19:05:53
【问题描述】:
我不知道为什么在尝试从创建的数组中设置或获取任何元素时出现分段错误!
这里符合A[0][0] = 1;
我正在使用 g++ 9.3.0。我做错了什么?
#include <iostream>
#define SIMULATIONS 30
using namespace std;
void init_matrixes(int a_rows, int b_cols, int vec_len, double **A, double **B, double **C)
{
A = new double *[a_rows];
B = new double *[vec_len];
C = new double *[a_rows];
for (int i = 0; i < a_rows; i++)
{
A[i] = new double[vec_len];
C[i] = new double[b_cols];
}
for (int i = 0; i < vec_len; i++)
B[i] = new double[b_cols];
}
int main()
{
double s;
int t1, t2, a_rows, b_cols, vec_len;
for (auto v : {50, 100})
{
a_rows = v;
b_cols = v;
vec_len = v;
for (int i = 0; i < SIMULATIONS; i++)
{
double **A, **B, **C;
init_matrixes(a_rows, b_cols, vec_len, A, B, C);
A[0][0] = 1; // error here
}
std::cout << "size = " << v<< " time = " << s / SIMULATIONS << endl;
}
return 0;
}
【问题讨论】:
-
参数按值传递,除非您通过引用传递它们。指针也不例外。您的
init_matrices不会从main初始化A、B或C -
您正在使用函数中的
new语句分配指针参数的本地副本。您需要分配给变量指向的指针。在main中,变量A没有指向分配的内存,因此当您尝试访问它时会出现段错误。 -
这能回答你的问题吗? stackoverflow.com/questions/373419/…(不是“如何制作二维数组”问题,而是“为什么我的 init_matrices 不能正常工作?”)
-
@ДмитрийПасько - 我不明白您需要“在其他函数中使用这些数组”的评论。只需将它们作为参数传递。我向您展示的示例程序展示了如何创建数组 - 之后,您可以随心所欲地使用它们。
标签: c++ arrays pointers segmentation-fault dynamic-arrays