копирование строки в C ++ «Ошибка чтения символов строки.» - PullRequest
0 голосов
/ 18 марта 2020

Я реализую стек, и я хотел бы получить sh и получить данные строки. я не могу просто установить

string name = originalString ???

вот что у меня есть для pu sh:

void push(StackNode** top_ref, int nAttack, int nDefense, string nName, string nType) {
    StackNode* stackNode = (StackNode*)malloc(sizeof(StackNode));
    stackNode->attack = nAttack;
    stackNode->defense = nDefense;

    stackNode->name = nName; //not working
    stackNode->type = nType; //not working

    stackNode->next = NULL;
    stackNode->next = *top_ref;
    *top_ref = stackNode;
} 

, где stackNode-> name

и stackNode-> type уже определены как строка

Я продолжаю получать: «Ошибка чтения символов строки.»

1 Ответ

0 голосов
/ 18 марта 2020

Проблема в malloc не очень хорошо с объектами. См. . Mallo c создает новый экземпляр класса или нет?

malloc выделяет достаточно места для хранения StackNode, но не вызывает конструктор для него , Он также не создает базовые объекты-члены, включая ваши string. Для этого вам нужно сделать, как описано в этом ответе:

A* a = (A*)malloc(sizeof(A));
new (a) A();

a->~A();
free(a);

Но на этом этапе вам действительно все равно следует просто использовать new. Существует очень мало причин для использования new в C ++ (есть время и место, но минимизируйте его). Еще реже вызывается malloc.

Do

StackNode* stackNode = new StackNode;

, который вызывает конструктор соответствующим образом. Не забудьте вызвать delete в памяти, когда вы закончите с этим!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...