Разыменование указателя на указатель на символ Переполнение стека

У меня есть следующий код:

char **ptr;
*ptr=strdup("This is a pointer");
cout<<*ptr<<endl;

Когда я пытаюсь выполнить это, я получаю segfault на cout инструкция. Если я сделаю вместо

char *ptr;
ptr=strdup("This is a pointer");
cout<<ptr<<endl;

Все работает правильно. В чем причина проблемы и каков обходной путь? Я не ищу решения типа «Использовать строки».

-1

Решение

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"));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]