Unbehandelte Ausnahme bei 0x010d1bd1 in d.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Pos...

...komplette Frage anzeigen

5 Antworten

Man kann wohl schlecht das „bool“ als Zeiger übergeben …

*bool[x+1] und *bool[x-1] liegen als Zeiger auf ein Array eine Adresse hinter bzw. vor dem bool. Wenn man sich diesen Ausdruck ansieht, ist er m.E. „in sich“ schon völliger Unsinn …

wolfgang1956 31.08.2013, 09:56

Bitte nochmals die Grundlagen zu C++ genauer checken …

0
hoxplus 31.08.2013, 10:23

Mein Beispiel war etwas blöd. So funktioniert es: aber wie geht das ganze jetz mit 2d arrays???

void irgendwas(bool* a[10])
{
int x = 3;
if(*a[x+1] || *a[x+2])
{
}
else
{
    *a[x+1] = true;
}
}
int main()
{
bool     b[10];
bool* bptr[10];
for(int i = 0; i<10; i++)
{   
    b[i] = false;
    bptr[i] = &b[i];    
}
irgendwas(bptr);
std::cout << *bptr[4];
}

PS: sorry für die komische formatierung. Ich versteh das Codeinfügen nicht so :D

0
wolfgang1956 31.08.2013, 10:39
@hoxplus

Das sieht so schon besser aus.

Ein 2d-Array hat eben 2 eckige Klammerpaare

a[10] ist 1d, die Arrayelemente erreicht man mit a[0] … a[9].

a[10][10] ist 2d, die Arrayelemente erreicht man mit a[0][0] … a[9][9].

a[10][10][10] wäre ein 3d-Array. Sinngemäß gilt dann für den Zugriff auf ein Element a[0][0][0] … a[9][9][9] …

Der Zugriff auf die Arrayelemente erfolgt, indem man zu nächst die „Zeile“ angibt und dann die „Spalte“ …

Leider kann man dem Beispiel nicht entnehmen, was du damit bezwecken willst … Sieh' dir ruhig mal an, wie man in Java oder Objective-C Variablen, Speicherplätze und Routinen benennt …

0
hoxplus 31.08.2013, 10:53
@wolfgang1956

Das ganze dient nur zu Übungszwecken.

Danke für die Hilfe. Jetzt kann ich es wieder. Sowas lernt man nicht im Info unterricht :D

0
wolfgang1956 01.09.2013, 07:34

Danke für die HA!

0

Ich gehe mal davon aus, dass "bool" einen Datentyp

int **bool

hat (anstatt "int" irgend ein anderer Integer-Datentyp).

Nur in diesem Fall würde der Compiler nicht meckern.

Bist du dir sicher, dass "x+1" und "x-1" auch im Array liegen und dass die jeweiligen Pointer, auf die "bool[x+/-1]" zeigen auch initialisiert sind.

Mögliche Fehlerfälle:

  • x = 0 => Dann wird mit "bool[x-1]" auf "bool[-1]" zugegriffen
  • bool[x+1] = NULL => Dann kann ein Zugriff auf *bool[x+1] nicht erfolgen
wolfgang1956 31.08.2013, 09:58

„bool“ ist ein Schlüsselwort, das man so nicht verwenden kann. Man kann ein Array nicht „bool“ benennen …

0
martin7812 31.08.2013, 18:18
@wolfgang1956

Aus der Frage ging nicht hervor, ob C oder C++ programmiert wird.

In C ist "bool" bei den meisten Compilern (z.B. GNU C 4.6.2) kein Schlüsselwort.

Da ich hauptberuflich in C (und nicht in C++) programmiere, hatte ich entsprechend geantwortet.

0

Die eckigen Klammern dereferenzieren das Array automatisch.

array[5]

ist also das gleiche wie

*(array + sizeof(/*Array-Typ*/) * 5)

Du hast also einmal zu oft dereferenziert: Mach die Sterne vor dem Arrayzugriff einfach wieder weg. Übrigens - wenn du jetzt theoretisch ein Array von Zeigern hast, kann man es in dieser Schreibweise

*(array[5])

eindeutig von einem Zeiger auf ein Array unterscheiden. Bei deiner Schreibweise geht das, wenn man die Operatorprioritäten nicht auswendig weiß, nicht - also lieber noch mal eine Klammer zusätzlich setzen. Das könnte viele Bugs vermeiden helfen.

Nicht, dass ich C++ könnte, aber kann es sein, dass das Array-Element auf das du zuzugreifen versuchst gar nicht existiert? Wie wird denn die Variable "x" initialisiert? Welchen Wert hat "x" innerhalb des if-Statements?

Zur Info: Das "==true" kannst du auch weglassen.

if (bool)

reicht.

Dory1 30.08.2013, 18:21

kann es sein, dass du das Sternchen innerhalb der if-Abfrage weglassen musst?

0
wolfgang1956 31.08.2013, 09:59

„bool“ ist ein Schlüsselwort, das man so nicht verwenden kann. Man kann ein Array nicht „bool“ benennen …

0
Dory1 31.08.2013, 12:15
@wolfgang1956

Hast schon recht. Das "bool" in meinem Beispiel sollte für eine beliebige Variable vom Typ bool stehen.

0

Hast du das vielleicht in einer schleife? und du versuchst auf das "minus einste" Element im Feld zuzugreifen? beziehungsweise deine schleife läuft zu weit und du schaust bei dem 20. Element nach, obwohl die Größe des Feldes bool[20] halt nur 20 ist? Dann müsstest du auf das 19. Element zugreifen.

BTW: das true kannste weglassen

wolfgang1956 31.08.2013, 09:57

„bool“ ist ein Schlüsselwort, das man so nicht verwenden kann. Man kann ein Array nicht „bool“ benennen …

0

Was möchtest Du wissen?