Я новичок в C ++ и сейчас работаю с контейнером STL.У меня возникла серьезная проблема с выполнением nodeStack.push(startnode) - компилятор обнаружил
nodeStack.push(startnode)
Обнаружена критическая ошибка1008 * 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); .... } Ошибка возникает в строке nodeStack.push(startnode);, начальный узел инициализируется с 0.
Обнаружена критическая ошибка1008 *
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); .... }
Ошибка возникает в строке nodeStack.push(startnode);, начальный узел инициализируется с 0.
nodeStack.push(startnode);
try int* val = new int[adjlist.size()]; вы в настоящее время выделяете один int и инициализируете его значение, а не выделяете массив int.
int* val = new int[adjlist.size()];
Структура стека разрушается, потому что она находится рядом с указателем в стеке памяти.
nodeStack.push на самом деле не ваша проблема.Вы объявляете int * val - указатель на int, а затем инициализируете целое число в val размером списка.Вы действительно хотите int * val = new int [adjlist.size ()];
Возможно, вы используете x86 DLL; когда я получил эту ошибку в VS4.5, я изменил свою целевую платформу на x86 и переключился на .Net 4.0. Это сработало для меня.