C Problem - Stack arround the variable "A" was Corrupted!?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C Problem - Stack arround the variable "A" was Corrupted!?

    Hallo Leute ich bräuchte mal einen Rat, und zwar bekomme ich immer diesen Fehler s.Topic.

    Es handelt sich bei der Aufgabe um eine 3x3 Reihe Matrize die mit einer anderen Multipliziert werden soll, mir ist alles soweit klar was ich machen muss nur wunder ich mich warum ich immer den Fehler bekomme!?? Könntet ihr mir Weiterhelfen?
    DANKE!

    Hier der Code


    Quellcode

    1. #include <cstdio>
    2. int main()
    3. {
    4. double A[2][2], B[2][2];
    5. char op;
    6. printf("######################################################\n");
    7. printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
    8. scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
    9. scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
    10. scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
    11. printf("\n\n######################################################\n");
    12. printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
    13. scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
    14. scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
    15. scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
    16. printf("\n\n######################################################\n");
    17. printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
    18. printf("| Multiplikation = m | Subtraktion = s | Addition = a |!\n");
    19. scanf("%c", &op);
    20. switch('op')
    21. {
    22. case 'm' : printf( "Multi");
    23. break;
    24. case 's' : printf( "Sub" );
    25. break;
    26. case 'a' : printf( "Add" );
    27. break;
    28. default : printf( "Leider haben Sie keine Operation ausgewählt!!!" );
    29. }
    30. return 0;
    31. }
    Alles anzeigen



    und Gleich nochmal Fix eine weitere Fragen angehangen:

    und zwar wenn ich mir eine Funktion erstelle um meine Matrix zu errechnen. Wie kann das Ergebnis dann auch in einer Matrix ausgeben lassen)?

    Da ich selbst kaum glaube es so schreiben zu können.

    Quellcode

    1. double matrizen_multi(double A[2][2], double B[2][2])
    2. {
    3. return (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
    4. (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
    5. (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
    6. }



    Grüße
    --Kommt noch--

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GFXShorty ()

  • Ich vermute scanf schreibt 2 Bytes an die Stelle von &op und überschreibt damit den Zeiger A auf die 3x3 mMatrix

    Abgesehen von dem Fehler ist dein switch-Statement falsch: Strings kann man nicht switchen.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • So jetzt hab ich das mal geändert, es läuft ein Stück weiter und dann bekomme ich wieder den Fehler!!!


    Quellcode

    1. #include <cstdio>
    2. double matrizen_multi(double A[2][2], double B[2][2]);
    3. int main()
    4. {
    5. double A[2][2], B[2][2];
    6. int o;
    7. printf("######################################################\n");
    8. printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
    9. scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
    10. scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
    11. scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
    12. printf("\n\n######################################################\n");
    13. printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
    14. scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
    15. scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
    16. scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
    17. printf("\n\n######################################################\n");
    18. printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
    19. printf("| Multiplikation = 1 | Subtraktion = 2 | Addition = 3 |!\n");
    20. scanf("%d", &o);
    21. switch(o)
    22. {
    23. case 1 : printf("Multi\n");
    24. break;
    25. case 2 : printf( "Sub\n" );
    26. break;
    27. case 3 : printf( "Add\n" );
    28. break;
    29. default : printf( "Leider haben Sie keine Operation ausgewählt!!!\n" );
    30. }
    31. return 0;
    32. }
    Alles anzeigen
    --Kommt noch--

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GFXShorty ()

  • Er sollte je nach Compiler beim 1.Quelltext folgende Fehlermeldung haben:
    matrize00.c:24:9: warning: multi-character character constant

    Weil er die Warnung nicht verstanden hat ist er auf Zahlen ausgewichen.
    Da der Quelltext kurz ist:

    Quellcode

    1. #include <stdio.h>
    2. int main()
    3. {
    4. double A[2][2], B[2][2];
    5. char op;
    6. printf("######################################################\n");
    7. printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
    8. scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
    9. scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
    10. scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
    11. printf("\n\n######################################################\n");
    12. printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
    13. scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
    14. scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
    15. scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
    16. printf("\n\n######################################################\n");
    17. printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
    18. printf("| Multiplikation = m | Subtraktion = s | Addition = a |!\n");
    19. scanf("%c", &op);
    20. switch(op) // hier war der Wurm drin
    21. {
    22. case 'm' : printf( "Multi");
    23. break;
    24. case 's' : printf( "Sub" );
    25. break;
    26. case 'a' : printf( "Add" );
    27. break;
    28. default : printf( "Leider haben Sie keine Operation ausgewählt!!!" );
    29. }
    30. return 0;
    31. }
    Alles anzeigen


    so geht der als C-Quelltext durch ;)
    Nicht komplett geprüft!

    MfG bcc-fan