Stack-Dump aufgrund fehlenden Adressoperators

Alles was mit C/C++ unter NetBeans zu tun hat

Moderator: wegus

Antworten
xp10r3r
Beiträge: 7
Registriert: 08.07.2018, 16:10

Stack-Dump aufgrund fehlenden Adressoperators

Beitrag von xp10r3r » 16.10.2018, 11:42

Moin,

ich hatte im Programm einen Fehler, der zu folgender Meldung führte.

Code: Alles auswählen

[main] b10-09 5876 cygwin_exception::open_stackdumpfile: Dumping stack trace to b10-09.exe.stackdump
Nach dem Debuggen stellte ich fest, dass ich den Adressoperator vergaß. Nach der Korrektur liefert das Programm die Summe der eingegebenen Zeilen. Nachdem ich die Korrektur durchgeführt hatte, wollte ich, um hier im Forum nachzufragen, den Fehler reproduzieren. Als ich nämlich den Breakpoint auf die markierte Stelle setzte, konnte ich in der Ausgabe einen Stack-Trace sehen. Nun wollte ich eigentlich fragen, wie man den Stack-Trace interpretieren kann. Jetzt muss ich allerdings zuerst fragen, wie ich den Stack-Trace erzeuge?

Ich nutze Netbeans und Cygwin. An den Versionen hat sich seit diesem https://www.netbeans-forum.de/viewtopic.php?f=24&t=7751 nichts geändert.

Viele Grüße

Code: Alles auswählen

                                                                                /* Author: 
                                                                                 * File:   B10-09
                                                                                 *
                                                                                 * Created on 
                                                                                 * 
                                                                                 * Start: 
                                                                                 * Ende:  */

#include <stdio.h>                                                              /* Praeprozessoranweisungen */

#define J_MAX 5

int ermittle_summe(int matrix_fp[][J_MAX], int anzahl_fp);

void main(void) {                                                               /* Hauptfunktion */
    #define I_MAX 5
    
    static int matrix[I_MAX][J_MAX], *izgr;
    
    printf("Matrix:\t%d", &matrix);
    
    printf("\nMatrix-Initialisierung [Anfangsadresse + Zeilennummer * %d + "
           "Spaltennummer]", J_MAX);
    for(int i = 0; i < I_MAX; i++)                                              /* Zeilenvorschub */
        for(int j = 0; j < J_MAX; j++) {                                        /* Spaltenvorschub */
            izgr = (int *)matrix + i * J_MAX + j;                               /* matrix    --> Ermittlung aktuelle Adresse
                                                                                   i * J_MAX --> Zeilenermittlung [MAtrix-Ablage zeilenweise im Speicher --> Ueberspringen von J_MAX Elementen fuer naechste Zeile]
                                                                                   j         --> Spaltenermittlung */
            
            *izgr = i * I_MAX + j;                                              /* Initialisierung nach rechts fortlaufende Zeilennummerierung
                                                                                   [0,0] =  0, [0,1] =  1, ..., [0,9] =  9
                                                                                   [1,0] = 10, [1,1] = 11, ..., [1,9] = 19
                                                                                   ...
                                                                                   [9,0] = 91, [9,1] = 92, ..., [9,9] = 99 */
            
/*
            *izgr = j * J_MAX + i;                                              /* Initialisierung nach unten fortlaufende Spaltennummerierung
                                                                                   [0,0] =  0, [0,1] = 10, ..., [0,9] = 90
                                                                                   [1,0] =  1, [1,1] = 11, ..., [1,9] = 91
                                                                                   ...
                                                                                   [9,0] =  9, [9,1] = 91, ..., [9,9] = 99 */
        }
    
    int anzahl;
    printf("\n\nWie viele Matrixzeilen sollen summiert werden [<= %d]? ", 
           I_MAX);
    scanf("%d", anzahl);

    int summe = ermittle_summe(matrix, anzahl);
    
    printf("\nDie Summe der ersten %d Matrixzeilen betraegt: %d.", anzahl, 
           summe);
}

int ermittle_summe(int matrix_fp[][J_MAX], int anzahl_fp) {
    printf("\nMatrix:\t%d", &matrix_fp);
    
    int summe;
    for(int i = 0; i < anzahl_fp; i++)
        for(int j = 0; j < J_MAX; j++)
            summe += matrix_fp[i][j];
    
    return summe;
}
Dateianhänge
Stack-Dump.png
Stack-Dump.png (88.29 KiB) 559 mal betrachtet

Antworten