2017-11-06 6 views
-1

Ich habe ein paar Probleme mit einer Matrix-Transponier-Frage aus einem Lehrbuch Ich bin Lernen C von.C: Transponierte Matrix, Segmentierungsfehler

Wenn der Code ausgeführt wird, gibt er eine große Menge willkürlicher Zahlen aus, gefolgt von "Segmentation fault (core dumped)".

Wenn man sich andere Antworten auf ähnliche Fragen ansieht, betreffen die meisten von ihnen Zeiger/Flags, aber das Buch hat diese Stufe noch nicht erreicht, so dass das Problem ohne sie gelöst werden sollte.

Q. Schreiben Sie eine Funktion transposeMatrix, die als Argument eine 4x5-Matrix und eine 5x4-Matrix verwendet. Lassen Sie die Funktion die 4x5-Matrix transponieren und speichern Sie die Ergebnisse in der 5x4-Matrix. Schreiben Sie auch eine Hauptroutine, um die Funktion zu testen.

#include <stdio.h> 

void transposeMatrix (int matrix1[4][5], int matrix2[5][4]) 
{ 
int i, j; 

for(i = 0; i < 4; ++i) { 
    for(i = 0; i < 5; ++i) { 
     matrix2[j][i] = matrix1[i][j]; 
    } 
} 

for(i = 0; i < 5; ++i) { 
    for(j = 0; j < 4; ++i) { 
     printf("%i ", matrix2[i][j]); 
    } 
    printf("\n"); 
} 
} 

int main (void) 
{ 
void transposeMatrix (int matrix1[4][5], int matrix2[5][4]); 
int imatrix2[5][4]; 

int imatrix1[4][5] = 
    { 
    {5, 6, 7, 8, 9}, 
    {1, 2, 3, 4, 5}, 
    {5, 4, 3, 2, 1}, 
    {9, 8, 7, 6, 5} 
    }; 


transposeMatrix(imatrix1, imatrix2); 

return 0; 
} 
+3

Bei Ihrer ersten 'for' Schleife verwenden beide Loops' i', die nicht funktionieren. Du brauchst auch 'j'. –

+1

'void transposeMatrix (int matrix1 [4] [5], int matrix2 [5] [4]);' ist in 'main()' nicht notwendig. –

+0

Und die zweite innere Schleife erhöht "i", wenn sie "j" erhöhen soll. –

Antwort

1

Sie haben gerade die falschen Loop-Variablen an einigen Stellen verwendet. In der ersten Schleife:

for(i = 0; i < 4; ++i) { 
    for(i = 0; i < 5; ++i) { 

soll.

for(i = 0; i < 4; ++i) { 
    for(j = 0; j < 5; ++j) { 

(dh Änderung i zu j in der inneren Schleife

Auch in der zweiten Schleife, die folgenden:

for(i = 0; i < 5; ++i) { 
    for(j = 0; j < 4; ++i) { 

sollte sein:

for(i = 0; i < 5; ++i) { 
    for(j = 0; j < 4; ++j) { 

(d.h. inkrementiert j, nicht i, in der inneren Schleife.

2
for(i = 0; i < 4; ++i) { 
    for(i = 0; i < 5; ++i) { 
     matrix2[j][i] = matrix1[i][j]; 
    } 
} 

Inner Schleifenzähler hier sollte j sein, aber Sie habe ich verwendet, ist es auch macht

matrix2[j][i] = matrix1[i][j]; 

Diese Aussage Verwendung nicht initialisierte Werte von j, die zu undefinierten Verhalten führt