gpt4 book ai didi

c++ - 传递多维数组时出现段错误,C++

转载 作者:行者123 更新时间:2023-11-30 04:14:06 25 4
gpt4 key购买 nike

我对使用 C++ 进行编码还很陌生,所以如果这个问题有一个非常明显的简单答案,我深表歉意。我正在尝试创建一个从 -1 到 1 的随机数矩阵。这是我正在使用的两个函数:

#include <iostream>
#include "matrix_fill_random.cpp"
using namespace std;

int main(int argc, int argv[]){

int n1, n2, n3;

if (argc != 4) {
cerr << "This program requires 3 argument!" <<endl;
return 1;
}
else{
n1 = argv[1];
n2 = argv[2];
n3 = argv[3];

double** a;

matrix_fill_random(n1, n2, a);

return 0;
}
}

#include <iostream>
using namespace std;

int matrix_fill_random(int n1, int n2, double** a){
for (int i=0; i<n1; i++){
for (int j=0; j<n2; j++){
double num = rand() % 2 - 1;
a[i][j]=num;
}
}
return 0;
}

最终,我尝试创建两个矩阵,然后将它们相乘,因此 n1、n2 和 n3 代表两个矩阵的行和列,但现在这还不太重要。我认为错误可能在于我如何声明我的变量或将它们传递给其他函数,但我不完全确定。

我觉得如果我能理解创建其中一个矩阵的原理,那么这将转化为我需要使用的其他函数。

最佳答案

double** a;

您还没有为指针分配内存,因此每次使用 operator [] 取消引用它时都会出现未定义行为。

在通过函数传递它之前,您应该分配一次a...

double** a = new double*[n1];

再一次在函数的 for 循环中:

for (int i = 0; i < n1; i++)
{
a[i] = new double[n2];
for (int j = 0; j < n2; j++)
{
double num = rand() % 2 - 1;
a[i][j] = num;
}
}

但不要忘记在使用完指针后delete[] 指针。您还应该删除 for 循环内分配的其他指针。

当然,这一切都可以通过使用std::vector来避免。这是你的程序安装了标准库:

std::vector<std::vector<double>> a(n1, std::vector<double>(n2));

int matrix_fill_random(std::vector<std::vector<double>> a)
{
for (int i = 0; i < a.size(); ++i)
{
for (int j = 0; j < a[i].size(); ++j)
{
double num = rand() % 2 - 1;
a[i][j] = num;
}
}
return 0;
}

关于c++ - 传递多维数组时出现段错误,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19083862/

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