С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972

Debug heap assert

21.12.2017, 22:24. Показов 2556. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Столкнулся с ошибкой c таким описанием: __acrt_first_block == header

Вот код:

DLL проект:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct splited_block {
   size_t id;
   uint8_t* data;
   size_t length;
 
   explicit splited_block(const size_t id, const size_t length)
      : id(id),
        length(length)
   {
      data = new uint8_t[length];
   }
 
   //~splited_ip_block() { delete[] data; } 
   // вот если закоментить деструктор, то вылетает ассерт, описанный выше.
   // если раскомментировать, то отладка просто падает в деструкторе без ассертов
 
   friend bool operator<(const splited_ip_block& lhs, const splited_ip_block& rhs) { return lhs.low_cnt < rhs.low_cnt; }
};
 
class Wall{
   std::set<splited_block>storage;
public:
   __declspec(dllexport) void save(const uint8_t* data, const size_t length, const size_t id);
};
 
void Wall::save(const uint8_t* data, const size_t length, const size_t low_cnt)
{
   const auto& it = storage.insert(splited_ip_block{ low_cnt, length - 0 });
   memcpy(it.first->data, data, length - 0);
}

тестовый консольный проект
Кликните здесь для просмотра всего текста
C++
1
2
3
Wall wall;
uint8_t test_data[] = { 0x0a, 0x0b, 0x0c,0x0d };
umts.parse(test_data, 4, 216);


Подскажите, что я делаю не так?

Добавлено через 40 минут
Хмм... если std::set заменить на std::vector, то все нормально. Проблема с insert или it?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2017, 22:24
Ответы с готовыми решениями:

Как исправить Debug Assert Failed в коде работы с матрицей?
Здравствуйте, мне нужно сделать такое задание: Написать функцию для произвольного двухмерного классического массива с использованием...

Debug Error HEAP CORRUPTION DETECTED
После ввода всех значений появляется окно с надписью Debug error! HEAP CORRUPTION DETECTED и так далее(во вложениях детальнее). Буду очень...

assert.h
Как понять часть после &quot;||&quot;? Оно выводит на экран, или куда то еще записывает ? assert(value == 0 || !&quot;Value not...

11
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.12.2017, 22:25
Лучший ответ Сообщение было отмечено mat_for_c как решение

Решение

Надо полноценную реализацию делать с конструктором копирования и прочим.
Избавься от указателя. Используй vector.
1
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
21.12.2017, 22:28  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Используй vector.
я хочу set
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.12.2017, 22:28
Я про data.
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
21.12.2017, 22:29  [ТС]
аа, это в структкре
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.01.2018, 12:46  [ТС]
Вернусь снова к данной теме, ибо ошибка не пропала. Даже в самом простом примере:
dll проект
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Exampl.h
class Example{
   std::vector<int> data;
   __declspec(dllexport) void foo();
 
// __declspec(dllexport) void foo() { data.push_back(10); }
// а при реализации тела метода в классе все ок.
}
 
// Example.cpp
void Example::foo() { data.push_back(10); } 
// при таком случае выдает assert при завершении программы
тестовый проект
C++
1
2
3
4
int main() {
   Example ex;
   ex.foo();
}
Кто-нибудь знает, в чем причина?
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
12.01.2018, 12:58
длл и проект одним компилем собраны?
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
12.01.2018, 12:59
Ну, как минимум, foo вызывать нельзя извне класса...)
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.01.2018, 13:04  [ТС]
Цитата Сообщение от Selot Посмотреть сообщение
длл и проект одним компилем собраны?
да
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Ну, как минимум, foo вызывать нельзя извне класса...)
пордон, public: забыл написать тут
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
12.01.2018, 13:06
Вообще, может быть, скорее всего, я «не шарю», но здесь вот структура называется:
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
1
struct splited_block
А деструктор для какого-то splited_ip_block:
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
13
//~splited_ip_block() { delete[] data; }
Тут тоже непонятно:
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
17
friend bool operator<(const splited_ip_block& lhs, const splited_ip_block& rhs) { return lhs.low_cnt < rhs.low_cnt; }
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
28
const auto& it = storage.insert(splited_ip_block{ low_cnt, length - 0 });
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.01.2018, 13:10  [ТС]
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Тут тоже непонятно:
Туда можно не смотреть Хочу разобраться с классом Example - он меньше и без опечаток (кроме public) в названиях
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
12.01.2018, 13:18
Тема с передачей класса из длл такая себе, прострел ног обеспечен, как и при передаче нетривиальных типов через границу "приложение-библиотека". Попробуйте обычные функции в длл использовать, котрые будут дергать уже методы класса. И создание/удаление объекта также через функции (фабрика). Типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// dll
 
// class declaration
class SomeClass
{
public:
  void foo();
};
 
extern "C"
{
  void create_instance(SomeClass* obj) { obj = new SomeClass(); }  
  void free_instance(SomeClass* obj) { delete obj; } 
 
  void wrap_foo(SomeClass* obj) { obj->foo(); }
  //...
}
C++
1
2
3
4
5
6
7
8
9
10
//proj
#include "SomeClass.h"
int main()
{
  SomeClass* obj;
  create_instance(obj);
  wrap_foo(obj);
  free_instance(obj);
 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2018, 13:18
Помогаю со студенческими работами здесь

Assert
Помогите пожалуйста написать функцию ассерт в файле... не знаю как((( объяяяясните..вопрос жизни и смерти

Деректива assert
Как правильно? #include &lt;iostream&gt; #include &lt;assert.h&gt; #define NDEBUG assert(n == 0); int main() { int n=0; ...

Макрос ASSERT
Взял готовый пример из учебника, код работает, но может кто-нибудь пояснить для чего используется функция Invariants. И как сделать...

Не могу отключить assert()
Я использую функцию assert() ,на cpprefernce написано : This macro is disabled if, at the moment of including &lt;assert.h&gt;, a...

Assert и запятые в шаблонах
Как запихать в assert шаблон с двумя аргументами? Чего-то не компилируется. template&lt;typename T1,typename T2&gt;bool test(){return...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru