У меня есть следующий код:
char **ptr;
*ptr=strdup("This is a pointer");
cout<<*ptr<<endl;
Когда я пытаюсь выполнить это, я получаю segfault на cout
инструкция. Если я сделаю вместо
char *ptr;
ptr=strdup("This is a pointer");
cout<<ptr<<endl;
Все работает правильно. В чем причина проблемы и каков обходной путь? Я не ищу решения типа «Использовать строки».
char **ptr; //I have a pointer to pointer to char
*ptr = ...; //I dereference the pointer I never initialized and, wait...
ptr
никогда не был инициализирован, чтобы указывать на что-либо. Когда вы разыменовываете и присваиваете ему, вы получаете неопределенное поведение. Либо просто не использовать **
указатели, когда они вам не нужны, или инициализировать ptr
,
char** ptr = new char*(strdup("where did my rubber duck go"));
Других решений пока нет …