Zugriffsverletzung



  • Hallo Leute,

    ich bin mir nicht ganz sicher, ob mein Problem hierher gehört. Falls nicht, gebt mir bitte Bescheid 😉

    Ich wollte mir ein Programm schreiben, dass eine zweidimensionale Matrix einliest und dann alle Elemente addiert.

    #include "stdafx.h"
    #include <iostream> 
    #include <cstdio> 
    #include <cstdlib> 
    using namespace std;
    #define max 20
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int nzeilen,  nspalten,  zeile,  spalte,  s=0;
    
    	int *matrix[max];
    
    	printf(" Matrix mit n Zeilen  und n Spalten \n\n");
    	printf("Anzahl der Zeilen? ");
    	scanf("%i",  &nzeilen);
    	printf("Anzahl der Spalten? ");
    	scanf("%i", &nspalten);
    
    	for (zeile=0; zeile<nzeilen; zeile++)
    	{
    	matrix[zeile] = (int*)malloc(nspalten*sizeof(int));
    	for (zeile=0; zeile < nzeilen; zeile++)
    	{
    		printf("\n");
    		for (spalte=0; spalte < nspalten; spalte++)
    		{ 
    			printf("Wert? "); 
    			scanf("%i", (matrix[zeile]+spalte));
    		}
    	}
    	printf("\n");
    
    	for (zeile=0; zeile<nzeilen; zeile++) 
    	{ 
    		printf("\n");
    
    		for  (spalte=0;   spalte<nspalten;   spalte++) 
    		{ 
    			printf("%5.2d",  *(matrix[zeile]+spalte)); 
    			s = s + *(matrix[zeile]+spalte);  
    			printf("\n\nSumme aller Matrix-Elemente    =    %d",   s);
    		}
    	}
    	/* Speicher wieder freigeben */
    		for  (zeile=0;   zeile<nzeilen;   zeile++)
    		free((matrix[zeile]));
    
    		return 0;
    	}
    
    }
    

    Ich kann die Anzahl der Zeilen und Spalten und die ersten drei Werte eingeben. Beim vierten Wert erhalt ich folgenden Fehler:

    Unbehandelte Ausnahme bei 0x0041a11f in 11-24.exe: 0xC0000005: Zugriffsverletzung-Schreibposition 0xcccccccc.

    Woran kann das liegen?

    Wär toll, wenn mir jemand weiterhelfen könnte.

    Danke schon mal im Voraus

    MfG Benjamin



  • du hast fehler bei der einrueckung. deine erste for schleife geht weiter als du vermutest.
    edit: weiterer fehler, siehe code.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define max 20
    
    int main(int argc, char **argv)
    {
    	int nzeilen,  nspalten,  zeile,  spalte,  s=0;
    
    	int *matrix[max];
    
    	printf(" Matrix mit n Zeilen  und n Spalten \n\n");
    	printf("Anzahl der Zeilen? ");
    	scanf("%i",  &nzeilen);
    	printf("Anzahl der Spalten? ");
    	scanf("%i", &nspalten);
    
    	for (zeile=0; zeile<nzeilen; zeile++)
    	{
    		matrix[zeile] = (int*)malloc(nspalten*sizeof(int));
    		for (zeile=0; zeile < nzeilen; zeile++) // doppelter loop boese
    		{
    			printf("\n");
    			for (spalte=0; spalte < nspalten; spalte++)
    			{
    				printf("Wert? ");
    				scanf("%i", (matrix[zeile]+spalte));
    			}
    		}
    		printf("\n");
    	} // hier war der "fehl"er
    
    	for (zeile=0; zeile<nzeilen; zeile++)
    	{
    		printf("\n");
    
    		for  (spalte=0;   spalte<nspalten;   spalte++)
    		{
    			printf("%5.2d",  *(matrix[zeile]+spalte));
    			s = s + *(matrix[zeile]+spalte);  
    			printf("\n\nSumme aller Matrix-Elemente	=	%d",   s);
    		}
    	}
    	/* Speicher wieder freigeben */
    	for  (zeile=0;   zeile<nzeilen;   zeile++)
    	free((matrix[zeile]));
    
    	return 0;
    }
    


  • Danke für die schnelle Antwort. Ich sollte nächstes Mal vielleicht doch vorher mal meine Klammern anschauen 😉 Ich hab den Code wie folgt abgeändert, für den doppelten Loop weiß ich aber keine andere Lösung.

    int _tmain(int argc, _TCHAR* argv[])
    {
    	int nzeilen,  nspalten,  zeile,  spalte,  s=0;
    
    	int *matrix[max];
    
    	printf(" Matrix mit n Zeilen  und n Spalten \n\n");
    	printf("Anzahl der Zeilen? ");
    	scanf("%d",  &nzeilen);
    	printf("Anzahl der Spalten? ");
    	scanf("%d", &nspalten);
    
    	for (zeile=0; zeile<nzeilen; zeile++)
    	{
    		matrix[zeile] = (int*)malloc(nspalten*sizeof(int));
    		for (zeile=0; zeile < nzeilen; zeile++)
    		{
    			printf("\n");
    			for (spalte=0; spalte < nspalten; spalte++)
    			{ 
    				printf("Wert? "); 
    				scanf("%d", (matrix[zeile]+spalte));
    			}
    		}
    	}
    	printf("\n");
    
    	for (zeile=0; zeile<nzeilen; zeile++) 
    	{ 
    		printf("\n");
    
    		for  (spalte=0;   spalte<nspalten;   spalte++) 
    		{ 
    			printf("%5.2d",  *(matrix[zeile]+spalte)); 
    			s = s + *(matrix[zeile]+spalte);  
    		}
    	}
    
    	printf("\n\nSumme aller Matrix-Elemente    =    %d",   s);
    
    	/* Speicher wieder freigeben */
    	for  (zeile=0;   zeile<nzeilen;   zeile++)
    	{
    		free((matrix[zeile]));
    	}	
    	return 0;
    
    }
    

    Ich erhalte aber immer noch den gleichen Fehler.

    Der Compiler hält an der Stelle

    .
    .
    .
    #endif  /* _INTEGRAL_MAX_BITS >= 64    */
                                    if (longone)
                                        *(long UNALIGNED *)pointer = (unsigned long)number;
                                    else
                                        *(short UNALIGNED *)pointer = (unsigned short)number;
    
                                } else /*NULL*/;
    .
    .
    .
    

    in der Datei input.c an



  • benutz mal meinen code.

    mit "doppeltem loop" meinte ich, dass du da drei loops verschachtelt hast, von denen die beiden aeusseren identisch sind:

    for (zeile=0; zeile<nzeilen; zeile++)
        {
            matrix[zeile] = (int*)malloc(nspalten*sizeof(int));
            for (zeile=0; zeile < nzeilen; zeile++)
    


  • Jetzt weiß ich, was du meinst.

    Ich hab deinen Code verwendet, aber es kommt immer noch der Fehler. Ich bin fast am verzweifeln.



  • welcher fehler? meinen code hab ich getestet und zumindest das einlesen funktioniert. allerdings versteh ich nicht, was du danach machst.

    du solltest besser die schreibweise verwenden:
    matrix[zeile][spalte]; statt deiner *(matrix[zeile]+spalte)
    fuehlt sich lesbarer an.



  • Habs gelöst. Das Problem lag wirklich an der doppelten FOR-Schleife. Da war eine zuviel, so wie du gesagt hast. Also danke für deinen Gedankenanstoss 👍 Nach dem Einlesen, geb ich die Matrix noch tabellenartig aus und lass die Summe aller Elemente berechnen.


Anmelden zum Antworten