Ich habe einige Probleme mit der Erstellung einer int-Matrix, ohne Speicherlecks zu erstellen. Ich möchte in der Lage sein, eine gegebene (globale) Matrix über read_matrix() dynamisch in eine beliebige Größe zu bringen. Aber dann möchte ich die Erinnerung später freigeben können. In meiner Hauptmethode sollte der zweite printf zu einem Busfehler führen, da ihm kein Speicher zugewiesen werden sollte. Wie würde ich das schaffen?int Matrix mit Zeigern in C - Speicherzuordnung Verwirrung
int** first_matrix;
int** second_matrix;
int** result_matrix;
int** read_matrix(int size_x, int size_y)
{
int** matrix;
matrix = calloc(size_x, sizeof(int*));
for(int i = 0;i<size_x;i++) {
matrix[i] = calloc(size_y, sizeof(int));
}
for(int i = 0;i<size_x;i++) {
for(int j = 0;j<size_y;j++) {
matrix[i][j] = i*10+j;
}
}
return matrix;
}
int main(int stackc, char** stack)
{
first_matrix = read_matrix(10,10);
printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
free(*first_matrix);
free(first_matrix);
printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
}
es scheint, dass die Schleife bis Matrix [i]! = NULL funktioniert, auch wenn ich nicht den letzten Zeiger auf NULL setzen, ist diese Koinzidenz/etwas anderes schlecht? – Fredrik
Wenn Sie einen zusätzlichen Zeiger zuweisen und ihn nicht setzen, wird * * standardmäßig auf NULL gesetzt, abhängig vom Betriebssystem (Windows setzt den zugewiesenen Speicher auf Null, Unix nicht). Wenn dies nicht der Fall ist, werden Sie das Ende des zugewiesenen Arrays verlassen und die Dinge freigeben, bis Sie einen NULL-Zeiger oder (wahrscheinlich) einen Absturz erleiden. –
Calloc setzt den Speicher immer auf null. – quinmars