Für eine Zuweisung muss ich in der Lage sein, vom Benutzer eingegebene Matrizen zu multiplizieren. Um die Matrizen zu halten, verwende ich 2D arrays
, deren sizes
vom Benutzer eingegeben wird. Ich initialisieren die Größe und erstellen Sie die array
wie folgt:C++ Segmentierungsfehler (Kernspeicherauszug) bei Verwendung eines dynamischen 2D-Arrays
Anmerkung, ich versuche short
zu verwenden, um die Menge an memory
auf den Werten (Prüfwerte werden wahrscheinlich nicht groß) verwendet zu begrenzen.
In der source
Datei, ein constructor
(der Standard-Konstruktor sieht identisch mit Ausnahme ohne parameters
und rows/cols
werden 1
initialisiert).
Header-Datei:
short int** value_array;
Quelldatei:
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];
}
In der Initialisierung function
:
void Matrix::init(unsigned int x, unsigned int y, short int value)
{
value_array[x][y] = value;
return;
}
Die destructor
sieht wie folgt aus:
Matrix::~Matrix() // destructor
{
for (unsigned int i = 0; i < rows; i++)
delete value_array[i];
delete [] value_array;
}
In der main.cpp
Datei, die nur Zeiger bezogene code
wird diese functions
aufrufen. Die value_array
ist eine private-variable
.
Die core dump
geschieht entweder, wenn die matrix
initialisiert wird oder (wenn es klein ist), wenn die matrix
das Produkt nach der Multiplikation enthält, erzeugt wird, was dazu führt, mich ist es irgendwo in der Schaffung Code zu denken.
Ich verwende Ubuntu 16.04
, läuft dies in Terminal mit der g++
compiler
.
Veröffentlichen Sie bitte ein [MCVE]. Durchlaufen Sie auch Ihr Programm mit dem Debugger, um die Quelle Ihres Fehlers einzuschränken, bevor Sie dies tun. –
BTW 'delete value_array [i];' soll 'delete [] value_array [i];' sein und der von Ihnen angegebene Code ist nicht vollständig für die Frage, die Sie stellen möchten. –
Warum nicht die Container verwenden, die C++ für Sie bereithält, statt '**' Zeug? – 4386427