2011-01-17 5 views
0

Ich habe einen Zeichenzeiger wie dieseDifferenz zwischen den Werten in Zeichenzeigern mit malloc Speicherung und ohne

char *ptr; 

I-Werte, um es wie diese

*ptr='a'; 
    *(ptr+1)='b'; 

Jetzt zuordnen kann, wenn ich dies tun kann, warum sollte ich ein malloc benutzen?

Bin ich nur glücklich, dass dieser Zeiger nicht auf eine Adresse verweist, die von einem Prozess verwendet wird? Oder besteht die Gefahr, dass meine Daten durch einen anderen Prozess beschädigt werden, wenn ich "malloc" nicht verwende?

+1

Sie geben keine Werte zu; Sie weisen einem nicht zugewiesenen Speicherbereich * Werte zu. Es ist undefiniertes Verhalten (wie @SeigeX sagt) und ist extrem gefährlich. – chrisaycock

Antwort

16

Bin ich einfach nur Glück, dass dieser Zeiger ist eine Adresse nicht Referenzierung, die durch ein Verfahren verwendet wird?

Nein, Sie haben kein Glück. Wenn du Glück hast, stürzt das Programm ab, und du weißt, dass du ein Problem hast. Wie beschrieben, ist Ihr Code Undefined Behavior. Sie schreiben Daten über einen Zeiger auf nicht zugeordneten Speicher.

§ 6.5.6/8
Wenn sowohl der Zeigeroperanden und das Ergebnis Punkt auf Elemente des gleichen Array-Objekt, oder eines nach dem letzten Element des Array-Objekt, so wird die Bewertung nicht einen Überlauf erzeugen; andernfalls ist das Verhalten nicht definiert.

+0

Sie irren sich, ich muss dann so verdammt glücklich sein: D – theReverseFlick

+4

@Shyam: "Works auf meiner Maschine" ist keine Situation, in der ein Programmierer sich glücklich nennt, in der Regel;). –

+1

@Shyam müssen wir dann verschiedene Definitionen für 'Glück' haben. Ich würde eher wissen, dass mein Code während der Entwicklung ein undefiniertes Verhalten hat, als einen Anruf am Wochenende zu erhalten, weil er gerade auf einem unserer Kundensysteme abgestürzt ist. – SiegeX

Verwandte Themen