gpt4 book ai didi

c++ - C++中的内存分配失败(使用new和delete)

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:11 25 4
gpt4 key购买 nike

我是一名尝试编写蒙特卡洛树搜索代码的普通学生。

为此,我创建了一个名为“Node”的结构,并尝试创建新的 Node* 指针并使用“new”为它们分配内存,但我的程序一直在崩溃,我非常感谢您的帮助。

这是我的代码的样子。失败的位置已标记。

提前谢谢你。

Node* knell;
Node* treePolicy(Node* currentnode){
puts("treepolicy");
Node* temp=(Node*)malloc(sizeof(Node));
puts("Mem Allocated");
Move save=MCTBoard.generateRandomLegalMove(currentnode->player); ///works very well up to here.
save.printMove();
temp=findNode(currentnode,save);
puts("Node Found");
knell=new Node;
if(temp==NULL){
free(temp);
temp = new Node; ///crashes the second time treePolicy(Node*) is called.
temp->setMove(save);
temp->child.clear();
currentnode->child.push_back(temp);
temp->parent=currentnode;
MCTBoard.playMove(save,currentnode->player);
for(int i=0;i<4;i++){
for(int j=0;j<=i;j++){
for(int k=0;k<=i;k++){
temp->board[i][j][k]=MCTBoard.a[i][j][k];
}
}
}
temp->value=temp->visited=temp->win=temp->draw=0;
temp->player=3-currentnode->player;
knell=temp;
//delete temp; -> even with this enabled, still crashes.
return knell;///an infinite loop happens here, but that is another problem so...
}
else{
///not important,and besides,I've not even reached here yet once.
}

其实在另一个函数中确实存在同样的问题,但我觉得那是其他问题。

那么,谁能告诉我为什么它会崩溃??

最佳答案

让我们来看看 temp 的生命周期。

您使用 malloc 分配了内存。

Node* temp=(Node*)malloc(sizeof(Node));

然后您将通过以下函数的返回值覆盖 temp

temp = findNode(currentnode,save);

然后您将使用 free 删除它。

free(temp);

findNode 返回您使用 free 释放的内存。崩溃的最可能原因是函数返回使用 new 而不是 malloc 分配的内存。

关于c++ - C++中的内存分配失败(使用new和delete),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com