Pointerübergabe vor Initialisierung
-
Schön und gut, was du dir da zusammenreimst, ich muss allerdings otze zustimmen, denn mit diesem Code
point = "a\0";
weist Du dem Zeiger point ein neues Ziel zu, das nicht innerhalb deines gerade frisch allokierten Speichers liegt. Das führt spätestens beim delete[] zu einer Speicherverletzung, da dann versuchst, nicht per new[] angeforderten Speicherplatz freizugeben.
Stattdessen solltest Du eher strcpy() oder noch besser strncpy() verwenden, damit wird dann auch dein Text in den gerade allokierten Speicher kopiert und der Zeiger wird nicht umgebogen
-
hmm, so 'ne wurst, das muss einem doch gesagt werden
dankeschöön
-
hmm, das ist trotzdem seltsam, warum gibt es beide male die gleiche adresse aus?
int main() { char *ptr = new char[2]; strcpy(ptr,"a"); cout << &ptr << "\n"; ptr = "a\0"; cout << &ptr << "\n"; }
-
&ptr gibt dir die Adresse des Pointers. Lass das & weg.
-
MaSTaH schrieb:
&ptr gibt dir die Adresse des Pointers. Lass das & weg.
wenn ich den adressoperator & weglasse, gibt mir ja cout den string bis zur terminierung aus!?
-
Dann caste das Ding nach void* oder so. Ich habe jetzt nicht im Kopf ob es für ostream einen operator << gibt.
-
cout<<static_cast<void*>(ptr);
und wehe ich hab jetzt wieder den falschen cast genommen^^
-
wie muss denn nun eine funktion aussehen der ein char** als referenz übergebenwird und in der funktion erst der speicher allokiert wird?
-
es gibt 2 ,öglichkeiten, wie ich den letzten post interpretieren kann:
1.void function(char** blub,unsigned int n){ *blub=new char[n]; }
void function(char**& blub,unsigned int n){ blub=new char*[n]; }
-
otze schrieb:
es gibt 2 ,öglichkeiten, wie ich den letzten post interpretieren
void function(char**& blub,unsigned int n){ blub=new char*[n]; }
char*& reicht
-
danke erstmal, ich werde es mal ausprobieren
eine frage aber noch im vorraus:
es wurde ja jetzt speicher für den ersten pointer allokiert, was ist den mit den andren die sich da noch verstecken ?
-
okay ich bedanke mich nochmal ^^
hat alles super geklappt.
-
Shlo schrieb:
otze schrieb:
es gibt 2 ,öglichkeiten, wie ich den letzten post interpretieren
void function(char**& blub,unsigned int n){ blub=new char*[n]; }
char*& reicht
char*& reicht nicht, da ich ja ein pointer auf ein array auf pointer habe
-
otze schrieb:
char*& reicht nicht, da ich ja ein pointer auf ein array auf pointer habe
Nein, du hast einen Pointer auf ein Array von Pointern - wenn du klugscheißen willst...
Besides, ich glaube nicht, dass der Fragesteller auch das gemeint hat.
-
Shlo schrieb:
otze schrieb:
char*& reicht nicht, da ich ja ein pointer auf ein array auf pointer habe
Nein, du hast einen Pointer auf ein Array von Pointern - wenn du klugscheißen willst...
Besides, ich glaube nicht, dass der Fragesteller auch das gemeint hat.
aber man konnte es so verstehen, und deshalb schrieb ich auch die möglichkeit dazu