[英]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.