unordered_map
öğesine yapılan başvuruları silmeye çalışıyorum. bunun sorumlusu benim sınıfların bir parçası gibi görünür:Unordered_map dosyasında işaretçi silme
Node n("My node");
graph.nodes.insert({n.name,n});
edge.from = &graph.nodes[n.name];
// Some other stuff
for(auto& edge : graph.edges)
{
if(edge.from->to_delete)
{
graph->nodes->erase(edge.from->name);
delete edge.from;
edge.from = NULL;
}
if(edge.to->to_delete)
{
graph->nodes->erase(edge.to->name);
delete edge.to;
edge.to = NULL;
}
if(edge->from && edge->to)
DoSomethingWithNodes(edge->from, edge->to);
else
removeEdge(edge);
}
Şu anda siliyorum işaretçileri bu answer ama I dayalı:
class Edge:
{
public:
Node* from;
Node* to;
}
class Node:
{
public:
std::string name;
bool to_delete;
}
class Graph:
{
public:
std::unordered_map<std::string, Node> nodes;
std::vector<Edge> edges;
}
ve
benim ana dosya kodu böyle bir şey yapıyorumdelete
ile satırda segmentasyon hatası alıyorum. Aynı cevapta,
smart pointers
'u kullanma önerisi de vardır. Burada
shared_ptr'u kullanma konusunda emin değilim. Buradaki seçeneğim var, birden çok kenarın bir düğüm nesnesine işaretçisi olacak, ancak aslında grafiğin unordered_map değerinden
erase
düğümünü kullanacağım zaman ne olacak. Orada işaret ediyor olsaydı, eğer/else koşulu için yanlış olur mu? Bunu tam olarak anlamadım.
DÜZENLEME:
Ben silinir önce bir düğüm adını görüntülemek istediğimizi varsayalım. Ben edge.from->to_delete
yaşadıysanız olarak nedense çünkü bazen gerçek dönen, boş göstericilerle karşı herhangi bir koruma olmaz, şu anda
for(auto& edge : graph.edges)
{
if(edge.from->to_delete)
{
printf("Node to delete: %s",edge.from->name.c_str());
graph->nodes->erase(edge.from->name);
edge.from = nullptr;
}
if(edge.to->to_delete)
{
printf("Node to delete: %s",edge.to->name.c_str());
graph->nodes->erase(edge.to->name);
edge.to = nullptr;
}
if(edge->from && edge->to)
DoSomethingWithNodes(edge->from, edge->to);
}
: Ben böyle bir şey olacak. Denediğim şey şu koşulların değişmesidir:
Ancak hiçbir şekilde yardımcı olmuyor.
seferinde bir soru sor. Eğer program beklendiği gibi davranmıyorsa MCVE – Slava
@Slava bağlı değil mi? Başka bir soru olduğunu düşünmüyorum. – sebap123
Zaten "unordered_map'de nesneye işaretçi silme" ile ilgili sorunuzu yanıtladım, kodunuzun beklendiği gibi çalışmaması neden farklı bir soru. Her şeyden önce, ona cevap vermek için yeterli bilgi yok. – Slava