簡體   English   中英

在 C++ 中復制字符串“讀取字符串的字符時出錯”。

[英]copying a string in C++ "Error reading characters of string."

我正在實現一個堆棧,我想推送和彈出字符串數據。 我可以不只是設置

字符串名稱 = originalString ???

這是我要推送的內容:

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 已經定義為字符串

我不斷收到:“讀取字符串字符時出錯。”

問題是malloc不能很好地處理對象。 請參閱malloc 是否創建類的新實例?

malloc分配了足夠的空間來保存StackNode ,但不會在其上調用構造函數。 它也不會創建底層成員對象,包括您的string 為此,您需要按照答案中的描述進行操作:

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

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

但在這一點上,你真的應該使用new 在 C++ 中使用new理由很少(有時間和地點,但盡量減少它)。 調用malloc是正確的次數更少。

StackNode* stackNode = new StackNode;

這將適當地調用構造函數。 完成后記得在內存上調用delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM