Member 11807654 Ответов: 3

Почему возникает эта ошибка :debug assertion failed! Файл: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c?


Я новичок в игре. Я хочу создать график из текстового файла (в каждой строке есть исходная вершина ребра и целевая вершина ребра), а затем распечатать его. но, он выдает ошибку: "consoleApplication1.exe и срабатывает точка останова".эта ошибка происходит во время работы линии "igraph_get_edgelist(&усилителя;графика &ампер;в, 0);".Я не ставил точку останова. отладчик устанавливает его, и позиция, которую он мне показывает, - это строка в файле dbgheap.c, который не является файлом, созданным мной. после того, как я нажимаю кнопку "Продолжить" в окне сообщения, происходит следующее erroe: "Debug Assertion Failed!
Файл: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c". почему возникает эта ошибка?

igraph_vector_t v;
 igraph_empty(&graph, 7, 0);
 ifstream inputFile("sample.txt");
 string line;
 igraph_vector_init(&v, 0);
 while (getline(inputFile, line))
 {
     istringstream ss(line);
     int v1, v2;
     ss >>  v1 >> v2 ;
     VECTOR(v)[0]=v1; VECTOR(v)[1]=v2;
     igraph_add_edge(&graph, v1, v2);
 }


 /* Check result */
 igraph_get_edgelist(&graph, &v, 0);
 igraph_vector_sort(&v);
 print_vector(&v, stdout);


Что я уже пробовал:

я не знаю причины этого

3 Ответов

Рейтинг:
12

Jochen Arndt

Вы получаете утверждение в обработке кучи. Вы можете проверить упомянутую строку, просмотрев источник dbgheap.с (см. В VC & lt;версия>\crt\src в вашем каталоге VisualStudio).

Такое утверждение обычно указывает на повреждение кучи.

Я никогда не использовал графика но ошибка очевидна и проверяется при чтении интерактивный график справочное руководство[^].

igraph_vector_init(&v, 0);
Цитата:
Эта функция строит вектор заданного размера и инициализирует каждую запись в 0.

VECTOR(v)[0]=v1
Цитата:
Самый простой способ получить доступ к элементу вектора - использовать векторный макрос. Этот макрос можно использовать как для запроса, так и для установки элементов igraph_vector_t.
...
Обратите внимание,что сейчас нет никаких проверок диапазона.

Вы создаете вектор нулевого размера, а затем пытаетесь получить доступ к элементам. Это, конечно, не удастся, потому что в куче не было выделено никакой памяти, и доступ к элементам, вероятно, использует NULL указатель, который позже улавливается проверками кучи.

Сначала вы должны проверить, сколько элементов находится во входном файле, и передать это число igraph_vector_init() чтобы выделить необходимую память.


Рейтинг:
1

Patrice T

Цитата:
t выдает ошибку: "consoleApplication1.exe сработала точка останова".

Точка останова-это не ошибка !
Точка останова связана с отладчиком, это то, что вы устанавливаете в определенном положении в своем коде, чтобы остановить выполнение программы, когда она достигнет этого положения, и переключиться в режим отладчика.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 11807654

но я не установил точку останова. отладчик устанавливает его, и позиция, которую он мне показывает, - это строка в файле dbgheap.c, который не является файлом, созданным мной. после того, как я нажимаю кнопку "Продолжить" в окне сообщения, происходит следующее erroe: "Debug Assertion Failed!
Файл: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c"

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 11807654

хорошо, спасибо

Рейтинг:
0

barneyman

точка останова запускает утверждение, которое терпит неудачу

определите, что такое assert, почему он терпит неудачу, и исправьте его в своем коде

я бы предположил, что вы развращаете кучу