Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно реализовать ввод любого нелинейного уравнения в программу http://www.cyberforum.ru/cpp-beginners/thread881158.html
Второй раз уже спрашиваю, весь интернет перерыл, ни хрена нету по теме. Надо чтобы пользователь мог ввести в программу любое нелинейное уравнение начиная от обычных квадратов x заканчивая логарифмами натуральными, и программа должна их понять и решить какими то там методами. Неужели ни кто ни чего подсказать не может. double f(double x) { return(sin(x)); } Есть ли возможность менять...
C++ Указатели Можно ли как-то избавиться от скобочек вокруг (*temp), как тут вообще переписать это? Item * ReadItems() { Item *head = NULL, **temp; ifstream IN(itemsName); temp = &head; char buf; while (IN.getline(buf, MAX_LEN, '\n')) { *temp = new Item; http://www.cyberforum.ru/cpp-beginners/thread881146.html
C++ Оператор суммирования (классы, перегрузка операторов)
#include <iostream> class mat { public: mat() { var = 0; } mat(int a) { var = a; } ~mat() { } void set(int b) { var = b; } int get() const { return var; }
Оптимизация функции двух переменных C++
Доброго времени суток! Помогите пожалуйста решить задачу: Дана функция -2*x*x+3*x*y-5*y*y+3*y, нужно её оптимизировать Я вот вроде как методом градиента делаю, но программа зацикливается(читал - по всей видимости, у меня "овраг") Как с этим бороться? #include <stdio.h> #include <conio.h> #include <math.h>
C++ Зацикливание при вводе из файла http://www.cyberforum.ru/cpp-beginners/thread881127.html
требуется ввести из файла в вектор данные типа float. программа зацикливается при выводе целой части вещественного числа. #include "stdafx.h" #include <iostream> #include <fstream> #include <vector> using namespace std; class buff {
C++ вставить в двумерный массив операцию подсчета (+) и (-) элементов массив : #include <iostream> #include <iomanip> #include <algorithm> #include <ctime> #include <random> #include <stdio.h> int main() { подробнее

Показать сообщение отдельно
DeadMonk
Сообщений: n/a
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];
 
Текущее время: 08:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru