Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Pointer Fehlersuche. » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 6 Beiträge
eulerscheZahl

Doch, das stimmt.
Es wird einem int* ein int zugewiesen (die Adresse mit einer Zahl überschrieben, statt mit einer anderen Adresse). In der Folge gibt es dann aber trotzdem Fehler 1.
Mit p = &zahl; könnte man aber beides auf einmal richten.
Nunzio

Danke für deine Antwort. Haben heute die Lösung bekommen und dort steht drin, das der erste Programmabschnitt den Fehler III enthält, aber ich verstehe nicht wieso. Ist das nicht falsch?
eulerscheZahl

2. ok
3. IV hast du da nicht. (siehe 6.)
4. kommt drauf an, was man unter "klappt" versteht. Ich kriege als Ausgabe "-1766966216"
5. die 0 ist Zufall. Bei mir kommt -1826597888 raus.
6. mit w = p würdest du das komplette Array verschieben. Der gcc kompiliert das nichtmal: error: incompatible types when assigning to type ‘char[3]’ from type ‘char *’ - w = p;
Fehler IV
7. Ja, hier würde wieder das komplette Array verschoben werden.
8. ok
Nunzio

Vielen Dank für deine Antwort erstmal. Ich habe noch 7 weitere kleine Ausschnitte.

2.
int main()
{
char zeichen, *p;
p = &zeichen;
printf("%c", *p);
return 0;
}

p wird hier auf zeichen umgebogen, bzw. zeigt auf zeichen. (sagt man das so?) Zeichen wurde aber nicht initialisiert, also würde ich hier Fehler II sagen.

3.
int main()
{
double d, *p;
*p = 77;
printf("%f", *p);
return 0;
}

Hier zeigt der Zeiger noch "irgendwohin", wurde also noch nicht initialisiert. (Fehler I) Zusätzlich vermute ich, das da nichts gutes bei rumkommen kann, wenn man jetzt versucht einen nicht initialisierten Zeiger mit einer Variable zu füttern. Deswegen würde ich hier auch noch Fehler IV hinschreiben.

4.
int main()
{
int zahl = 5;
double *p;
p = &zahl;
printf("%i", *p);
return 0;
}

hier wird ein Zeiger vom Datentyp double * auf eine int-adresse umgebogen und das ist Fehler III. Allerdings klappt es in auf meinem Computer trotzdem. großes Grinsen

5.
int main()
{
int v[2], *p;
p = v;
printf("%i", *p);
return 0;
}

Die einzelnen Bestandteile des Feldes wurden nicht initialisiert und p zeigt jetzt auf die erste Adresse des Arrays. (richtig?) Also ist das hier Fehler II. Ich kann mir allerdings nicht erklären, wieso da 0 rauskommt.

6.
int main()
{
char v[] = {1, 2, 3}, w[3];
char *p;
p = v;
w = p;
printf("%c", w[0]);
return 0;
}

Hier bin ich mir nicht sicher. p allein enthält ja die Adresse auf die gezeigt wird. Wird also versucht der ersten Feldvariable eine neue Adresse zu geben? Ich habe einfach Fehler IV angegeben. Könnte auch sein das der adresswertige Ausdruck nicht kompatibel zu w ist, daher will ich Fehler III nicht ausschließen.

7.
int main()
{
int v[2];
*v = 1;
v++;
*v = 2;
printf("(%i,%i)", v[0],
v[1]);
return 0;
}

Hier wird versucht die Adresse zu inkrementieren. (vermute ich) Also wird versucht die Adresse der ersten Feldvariable zu ändern, was ja nur schiefgehen kann. Fehler IV.

8.
code:
1:
2:
3:
4:
5:
6:
7:
int main()
{ 
char v[] = {65, 66}, *p;
p = v[0]; 
printf("%c", *p); 
return 0;  
}

Hier zeigt der Zeiger auf einen inkompatiblen Datentyp und somit ist der Zeiger auch nicht korrekt initialisiert worden. Fehler I und III.

Vielen Dank im Voraus. EDIT : Hab jetzt rausgefunden, wie ich den Code ansprechender einfügen kann, ab jetzt mache ich das immer so. Ich hoffe man kann jetzt noch drüber hinwegsehen, ist ja kein umfangreicher Code.
eulerscheZahl

Dereferenzieren heißt dahin gehen, wo der Zeiger hinzeigt. Wenn in den Zeiger noch nichts reingeschrieben wurde, kann da nichts gutes rauskommen.

Ich hätte auch die 1 genommen, beim printf trifft das zu.
Nunzio Pointer Fehlersuche.

Grüße, ich hab hier eine Aufgabe mit Pointern. Dort sind kleine Programmausschnitte gegeben wo Fehler drin stecken und ich soll die Fehler erkennen und diese einordnen. Diese Fehler gibt es :
I. Dereferenzierung eines nicht initialisierten Zeigers ("zeigt irgendwohin").
II. Zeiger zeigt auf nicht initialisierte Variable.
III. Wertzuweisung an Zeiger mit inkompatiblem Datentyp.
IV. Versuch, einer Feldvariable eine neue Adresse zuzuweisen.

Das wäre der Ausschnitt Nummer 1.

int main()
{
int zahl = 33, *q;
q = zahl;
printf("%i", *q);
return 0;
}

Ich weiß, dass das & vor zahl fehlt, aber ich bin mir nicht so richtig sicher, welcher Fehler das ist. Ich würde sagen das wäre Fehler 1, weil der Zeiger ja erstellt wird, aber nicht halt nicht richtig .. mit Daten gefüttert sag ich jetzt mal. Hab' ich das jetzt richtig so gemacht? Komme auch mit dem Ausdruck dereferenzieren nicht so recht klar. Ich hoffe mir kann jemand helfen, liebe Grüße!