Zugriffsverletzung/falscher Code?

  • Themenstarter Themenstarter ByeBye 249714
  • Beginndatum Beginndatum
B

ByeBye 249714

Hallo, ich habe versucht ein Programm zu schreiben, inwelchem der Benutzer Zahlen eingeben kann (die in einem Array gespeichert werden), dann eingibt, von welcher Arrayposition aus die Zaheln aufsummiert, und, wieviele Arraypositionen aufsummiert werden sollen.

1. Problem: "Nachdem der Benutzer die "0te" Zahl eingibt stürzt das Programm mit der Meldung "Unbehandelte Ausnahme bei 0x68054ada (msvcr80d.dll) in Summenbrechnung.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcccccccc." ab. Ist etwas an dem Code oder etwas grundlegendes falsch?

2. Sache: Bei "int meinezahlen[1000]" habe ich die 1000 in die Klammern gesetzt. Eigentlich wollte ich, das dort die Zahl steht, die der Benutzer für "Zahlanzahl" auserkoren hat. Aber wenn ich "Zahlanzahl" oder ähnliches in die eckigen Klammern setze kommt eine Fehlermeldung... wie mache ich das korrekt?

Code:
#include <stdio.h>
#include "stdafx.h"
int summe_rek(int zahlen[], int start, int anzahl) {
  if (anzahl == 0) return 0; 
  return zahlen[start] + summe_rek(zahlen, start + 1, anzahl - 1);
}  

int main() {
  int Zahlanzahl;
  printf("Wieviele Zahlen möchten sie eingeben?\n");
  scanf_s("%i", &Zahlanzahl);
  int meinezahlen[1000];
  int i;
  for (i = 0; i <= Zahlanzahl; i++) {
	  printf("%i te Zahl:\n", i);
	  scanf("%i", meinezahlen[i]);
  }
  int start,anzahl;
  printf("Ab welcher Zahl möchten sie aufsummieren?\n");
  scanf_s("%i", &start);
  printf("Wie viele Zahlen möchten sie aufsummieren?\n");
  scanf_s("%i", &anzahl);
  printf("Summe: %i\n", summe_rek(meinezahlen, start, anzahl));
  getchar();
  getchar();
  return 0;
}

Ich benutze Visual Studio 2005.;c++
 
Zuletzt bearbeitet von einem Moderator:
1. Problem: "Nachdem der Benutzer die "0te" Zahl eingibt stürzt das Programm mit der Meldung "Unbehandelte Ausnahme bei 0x68054ada (msvcr80d.dll) in Summenbrechnung.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcccccccc." ab. Ist etwas an dem Code oder etwas grundlegendes falsch?

Code:
...
  int meinezahlen[1000];
  int i;
  for (i = 0; i <= Zahlanzahl; i++) {
	  printf("%i te Zahl:\n", i);
	  scanf("%i", meinezahlen[i]);
  }
...

Hi Quwerfeldein,

der Grund für den Speicherzugriffsfehler liegt in der fehlerhaften Bedingung der for-Schleife. Wenn man bei 0 anfängt und bei 1000 aufhört zu zählen sind es 1001 Elemente, dein Array hat aber nur 1000 Elemente.

Du versuchst also auf das 1001 Element zugreifen und das gibt es nicht.

richtig währe es wie folgt:

Code:
...
for (int i = 0; i < Zahlanzahl; i++)
...


2. Sache: Bei "int meinezahlen[1000]" habe ich die 1000 in die Klammern gesetzt. Eigentlich wollte ich, das dort die Zahl steht, die der Benutzer für "Zahlanzahl" auserkoren hat. Aber wenn ich "Zahlanzahl" oder ähnliches in die eckigen Klammern setze kommt eine Fehlermeldung... wie mache ich das korrekt?

Wie man das zur Laufzeit angeben kann, findest du hier unter "Zur Laufzeit erzeugte Arrays".

Viel Erfolg

Gruß
RudolfG
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort. Die selbe Fehlermeldung tritt jedoch trotz Änderung noch auf.
 
Anzahl der Zahlen: 1
0te Zahl: 0
Unbehandelte Ausnahme bei 0x68004ada

Anzahl der Zahlen: 1
0te Zahl: 1
Unbehandelte Ausnahme bei 0x67f94ada

Anzahl der Zahlen: 1
0te Zahl: 11111
Unbehandelte Ausnahme bei 0x68004ada

Anzahl der Zahlen: 5
0te Zahl: 0
Unbehandelte Ausnahme bei 0x67ed4ada

Anzahl der Zahlen: 5
0te Zahl: 0
Unbehandelte Ausnahme bei 0x67f94ada

@Trullenberg Jetzt klappt es! Machmal sagter mir dass an manchen Stellen scanf unsicher sei... und bei scanf_s ist wieder alles in Ordnung. Würde auch gern wissen was es damit auf sich hat...

danke!
 
Zuletzt bearbeitet von einem Moderator:
Zurück