【发布时间】:2016-05-20 17:14:04
【问题描述】:
对于作业,我需要能够乘以用户输入的矩阵。为了保存矩阵,我使用了 2D arrays,它们的 sizes 由用户输入。我初始化大小并创建array,如下所示:
注意,我正在尝试使用 short 来限制值上使用的 memory 的数量(测试值可能不会很大)。
在source 文件中,一个constructor(默认构造函数看起来相同,除了没有parameters 和rows/cols 被初始化为1)。
头文件:
short int** value_array;
源文件:
Matrix::Matrix(unsigned int x, unsigned int y)
{
rows = x;
cols = y;
value_array = NULL;
value_array = new short int*[rows];
for (unsigned int i = 0; i < cols; i++)
value_array[i] = new short int[cols];
}
在初始化function:
void Matrix::init(unsigned int x, unsigned int y, short int value)
{
value_array[x][y] = value;
return;
}
destructor 看起来像这样:
Matrix::~Matrix() // destructor
{
for (unsigned int i = 0; i < rows; i++)
delete value_array[i];
delete [] value_array;
}
在main.cpp 文件中,唯一与指针相关的code 是调用这些functions。 value_array 是 private-variable。
core dump 发生在 matrix 正在初始化时或(如果它很小)在创建乘法后包含乘积的 matrix 时发生,这让我认为它在创建代码中的某个位置。
我正在使用Ubuntu 16.04,在终端中使用g++ compiler 运行它。
【问题讨论】:
-
请发minimal reproducible example。在执行此操作之前,还要使用调试器逐步检查您的程序以缩小错误来源。
-
顺便说一句
delete value_array[i];应该是delete[] value_array[i];并且您提供的代码对于您提出的问题并不完整。 -
为什么不使用 c++ 为您提供的容器而不是
**东西?
标签: c++ arrays matrix dynamic-arrays coredump