Для назначения мне нужно уметь умножать введенные пользователем матрицы. Чтобы удерживать матрицы, я использую 2D arrays
, их sizes
, введенные пользователем. Я инициализировать размер и создать array
следующим образом:Сбой сегментации C++ (дамп ядра) при использовании динамического 2D-массива
примечания, я пытаюсь использовать 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
.
Опубликовать [MCVE] пожалуйста. Также пройдите через вашу программу с помощью отладчика, чтобы сузить источник вашей ошибки, прежде чем делать это. –
BTW 'delete value_array [i];' должен быть 'delete [] value_array [i];' и код, который вы предоставляете, не является полным для вопроса, который вы задаете. –
Почему бы вам не использовать контейнеры C++ для вас вместо '**' stuff? – 4386427