Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
DeadMonk

Всякие ошибки видел , но такие (

27.05.2013, 21:33. Показов 623. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот, собственно, участок кода

C++
1
2
3
    printf("[1]\n");
    Iface_TM_Element* te = new Iface_TM_Element[1];
    printf("[2]\n");
при компиляции с режимом Release в VS 2008 все запускается нормально
а при компиляции в режиме Debug консоль выдает следующее-

[1]
[2]
[1]
[2]
[1] - далее вылет

Iface_TM_Element никаких конструкторов не имеет:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Iface_TM_Element
{
    unsigned char type;
    unsigned char size;
    unsigned char slide_pos;
 
    unsigned short rx;      //relative  menu x
    unsigned short ry;      //relative  menu y
    unsigned long command;
 
    char *value;
    Iface_Textmenu* on_hit;
};
никаких строк после [1] и до [2] больше нет.

подскажите пожалуйста, в чем вообще тут может быть проблема, как может вылетать при выделении памяти оператором new? (никогда такого не встречал)
имеет ли смысл выкладывать код который дальше задействует переменную "te"?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2013, 21:33
Ответы с готовыми решениями:

Как исправить такие ошибки
Как исправить такие ошибки? cc1plus: warnings being treated as errors Line 3: warning: ignoring #pragma hdrstop Line 18: error:...

Все время устанавливаются нежелательные ПО, такие как Амиго, китайские программы и всякие ненужные ПО
Как то раз я скачал программу CPU Conrol, установил и заметил, что установились такие программы, как Амиго, я почистил все корни Амиго и...

Не создаются точки восстановления и всякие ошибки ЖД
Здравствуйте. Такая ситуация. Windows 7 x64. Установлены 2 диска, каждый поделён на два раздела. 2 года назад чисто ради интереса...

3
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.05.2013, 21:39
Цитата Сообщение от DeadMonk Посмотреть сообщение
имеет ли смысл выкладывать код который дальше задействует переменную "te"?
Имеет смысл выложить весь код
0
DeadMonk
27.05.2013, 22:08
кода уж слишком много...

вот что я имею по данному участку:

проблемная функция(отключение которой решает проблему) -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void MAPEDmenu_init()
{
#ifdef _DEBUG
    printf("[~][->][MAPEDmenu_init]\n");
#endif
 
menu_start.Init();
 
menu_start.AddElement(IF_ELID_SEL_TXT,0,"Create new map",0,0,0);
menu_start.AddElement(IF_ELID_SEL_TXT,0,"Load exsisting map",0,0,0);
menu_start.AddElement(IF_ELID_SEL_TXT,0,"Exit",0,0,0);
 
//menu_start.Activate(1);
 
#ifdef _DEBUG
    printf("[~][<-][MAPEDmenu_init]\n");
#endif
}
теперь Iface_Textmenu::AddElement:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void Iface_Textmenu::AddElement(unsigned char type,unsigned char size,
                                char* name,Iface_Textmenu* menu,
                                unsigned short rx,unsigned short ry)
{
 
    printf("[1]\n");
    
    Iface_TM_Element* te = new Iface_TM_Element[1];
 
    printf("[2]\n");
 
    
    te->on_hit = menu;
    te->size = size;
    te->slide_pos = 0;
    te->type = type;
    te->rx=rx;
    te->ry=ry;
    te->value = 0;
 
    //free this (TODO)
    if(name == 0)
    {
        if(size > 0)
        {
        te->value = new char[size];
        memset(te->value,0,size);
        }
    }
    else
    {
        te->size = strlen(name) + 1;
        te->value = new char[size];
        strcpy(te->value,name);
        te->value[size] = 0;
    }
 
    
[!!!!!!]this->lst_lbl.NewLink(te); //как выяснилось дальше отключение данной строки уберает вылет программы
    this->lst_lbl.ldata->last->i->command = this->lst_lbl.ldata->total;
    
    //FIRST ELEMENT
    if(this->sel_lbl == 0)
    {
        if((type & 0x0f) != IF_ELID_STA_TXT) //non static - selectable
        {
            this->sel_lbl = this->lst_lbl.ldata->last;
        }
    }
};
реализация this->lst_lbl.NewLink(te); (добавление нового элемента в лист не создавая экземпляр класса T)
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
TList<T>* NewLink(T* t)
{
 
    TList<T>* tl = 0;
    tl = new TList<T>[1]; 
    
    tl->next=0;
    tl->prev=0;
    tl->ldata=this->ldata; 
 
    tl->i=t; // тут не происходит выделение под экземпляр - только присвоение в данном случае переменной "te".
    
    if(this->ldata->total == 0) // 1st item?
    {
 
        tl->ldata->first=tl;
        tl->ldata->last=tl;
    }
    else
    {
        tl->prev=this->ldata->last;
        this->ldata->last->next=tl;
        this->ldata->last=tl;
    }
 
    ++this->ldata->total;
 
    return tl;
}
Добавлено через 18 минут
всем спасибо разобрался!

ошибка вот где:
создается экземпляр класса Iface_TM_Element[1] с именем te;
далее

C++
1
2
3
4
te->size = strlen(name) + 1;
        te->value = new char[size];
        strcpy(te->value,name);
        te->value[size] = 0;
te->value[size] выходит за границы new char[size] и происходит нарушение в памяти;
исправил new char[size] на new char[te->size];
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.05.2013, 22:40
Цитата Сообщение от DeadMonk Посмотреть сообщение
всем спасибо разобрался!
Давно замеченный факт. Когда задаёшь вопрос кому-нибудь другому, то в процессе формулирования вопроса очень часто сам находишь ошибку. Так что в любом случае время было потрачено не зазря
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2013, 22:40
Помогаю со студенческими работами здесь

Всякие дисплеи HD44780 и всякие АТмеги. Напоминалка.
Здравствуйте, господа! ВНЕЗАПНО обнаружил, что при очередной возне с каким-нибудь будущим девайсом, все время пялюсь в даташит по...

Windows 7 64 bit после системного обновления выходят всякие ошибки?
Привет всем: после системного обновления стало жутко тормозить, долгая загрузка, не удалось запустить службы и.тд =( если кто знает...

Возможно ли отключить отображение компьютера в локальной сети? Чтобы комп не видел сам себя, а остальных видел
Локалка на десяток компов, пользователи — классическая бухгалтерия. На каждом компе есть расшареная папка для обмена файлами — набрала...

Выдает такие ошибки
Помогите пожалуйста. Хз почему так. До 14 числа мне нужно с этим разобраться

Из-за чего такие ошибки?
Запускается /Users/volchkov/build-untitled7-Desktop_Qt_5_7_1_clang_64bit-Debug/untitled7.app/Contents/MacOS/untitled7... Could not parse...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru