Pile de pousser les causes d'erreur critique
Je suis nouveau sur le C++ et le travail avec les conteneur STL pour le moment.
J'ai eu un problème grave de l'exécution d'une nodeStack.push(startnode)
- le compilateur affiche un
Critique erreur détectée c0000374
Followign montre le code de la fonction où l'mentionnées erreur se produit:
vector<int> Graph::iterativeDepthSearch(map<int, vector<int>> adjlist, int startnode) {
stack<int> nodeStack;
vector<int> visitList;
//Knotenbesuchsliste initialisieren
int* val = new int(adjlist.size());
for (int i = 0; i < (int) adjlist.size(); i++) {
val[i] = 0;
}
int cnt = 1;
nodeStack.push(startnode);
....
}
L'erreur se produit dans la ligne nodeStack.push(startnode);
, startnode est initialisé à 0.
totowtwo réponse vous aidera. Je voudrais juste ajouter que pour l'initialisation de votre tableau à un appel à ZeroMemory (si disponible) ou memset est suffisant.
Sur une autre note, vouliez-vous dire de la copie de votre carte dans la fonction plutôt que d'utiliser une référence à const c'est à dire
ou encore mieux, std::fill!
ou même betterer, std::vector.
Sur une autre note, vouliez-vous dire de la copie de votre carte dans la fonction plutôt que d'utiliser une référence à const c'est à dire
const map<int,vector<int>>&
?ou encore mieux, std::fill!
ou même betterer, std::vector.
OriginalL'auteur Georg Leber | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
essayer
int* val = new int[adjlist.size()];
vous êtes actuellement à l'attribution d'un seul int et l'initialisation de sa valeur, de ne pas allouer un tableau d'entiers.La pile de la structure est corrupteur, car il est à côté de votre pointeur dans la pile mémoire.
OriginalL'auteur totowtwo
nodeStack.push n'est pas vraiment votre problème. Vous déclarez int* val - d'un pointeur de type int, alors l'initialisation de l'entier au val avec la taille de la liste. Vous voulez vraiment
int *val = new int[adjlist.size()];
OriginalL'auteur John
Il est possible que vous utilisez un x86 DLL; quand j'ai eu cette erreur en VS4.5, j'ai changé de plate-forme cible pour x86 et commuté .Net 4.0. Ce qui a fonctionné pour moi.
OriginalL'auteur nmserve