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.