Толкание стека вызывает критическую ошибку - PullRequest
4 голосов
/ 16 июня 2011

Я новичок в C ++ и сейчас работаю с контейнером STL.У меня возникла серьезная проблема с выполнением 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.

Ответы [ 3 ]

15 голосов
/ 16 июня 2011

try int* val = new int[adjlist.size()]; вы в настоящее время выделяете один int и инициализируете его значение, а не выделяете массив int.

Структура стека разрушается, потому что она находится рядом с указателем в стеке памяти.

4 голосов
/ 16 июня 2011

nodeStack.push на самом деле не ваша проблема.Вы объявляете int * val - указатель на int, а затем инициализируете целое число в val размером списка.Вы действительно хотите int * val = new int [adjlist.size ()];

0 голосов
/ 15 октября 2014

Возможно, вы используете x86 DLL; когда я получил эту ошибку в VS4.5, я изменил свою целевую платформу на x86 и переключился на .Net 4.0. Это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...