Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > multithreaded


Автор: kostay 26.10.2008, 21:23
когда в релизе/debuge ставлю multithreaded самое первое тобиш то вообше чуш проиcxодит, в массиве который содержит данные что где рисовать, там одHёрки, двойки, -1, так вот по4емуто 1 переделываются на -1... очень расстроен, но в multithreaded dll всё ок, что ета за зараза такая?

Автор: kostay 26.10.2008, 22:06
http://ipicture.ru/


первое так как должно буть multithreaded debug dll
второе multithreaded debug
последнее single threaded

msvs 2003 и 2008 впринципе тоже самое

вот ещо

Код

class Asema{                    
private:
    int** _lauta;


Код

Asema::Asema(){
    _lauta = new int*[8];
    for(int i = 0; i<8;i++) 
        _lauta[i] = new int[i];

    //tдytetддn taulukko
    for(int i=0; i<8; i++){                        //i - rivit
        for(int j=0; j<8; j++){                    //j - sarakkeet
            _lauta[i][j] = 0;                    //ekaksi kaikki tyhjдt
            if(i<3){                            //valkoiset
                if((i==0 || i==2) && j%2!=0){        //1 ja 3 rivi, joka toinen parillinen
                    _lauta[i][j] = 1;
                }
                if(i==1 && j%2==0){                //2 rivi, joka toinen pariton
                    _lauta[i][j] = 1;
                }
            }
            if(i>4){                            //punaiset
                if((i==5 || i==7) && j%2==0){        //6 ja 8 rivi, joka toinen pariton
                    _lauta[i][j] = 2;
                }
                if(i==6 && j%2!=0){                //7 rivi, joka toinen parillinen
                    _lauta[i][j] = 2;
                }
            }
            std::cout<<_lauta[i][j];
        }
    }
    for(int i=0; i<8; i++){                        //i - rivit
        for(int j=0; j<8; j++){                    //j - sarakkeet
                                                //kielletyt ruudut                
            if(i%2==0 && j%2==0){        
                _lauta[i][j] = -1;
            }
            if(i%2!=0 && j%2!=0){                
                _lauta[i][j] = -1;
            }
        }
    }
}
Asema::~Asema(){
    delete this;
    delete _lauta;
}
void Asema::printTilanne(){
    std::cout<<"\n\n";
    for(int i=0; i<8; i++){
        for(int j=0; j<8; j++){
            std::cout<<" "<<_lauta[i][j];
        }
        std::cout<<"\n";
    }
}


ещо вот такие ошибки как то раз удалось словить

Код

2003_Tammi error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
2003_Tammi error LNK2001: unresolved external symbol __malloc_dbg
2003_Tammi error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)




ну ооочень беспокоит ето меня, кто знает отзовитесь

Автор: kostay 26.10.2008, 22:47
ето 4о глюк студии??

из папки шас запускаю цифри те 4то надо во всех, никаких ошибок сразу скомпилил и накопировал все варианты и все окей..

Автор: jonie 26.10.2008, 23:31
http://www.google.com/search?client=opera&rls=ru&q=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&sourceid=opera&ie=utf-8&oe=utf-8 решение одной из Ваших проблем.

Автор: kostay 26.10.2008, 23:32
проблема в клавиатуре нету тут букв некоторых

Автор: J0ker 27.10.2008, 03:09
просто шедеврально  smile 
интересно, он и разговаривает так-же?

Автор: Lazin 27.10.2008, 06:29
я то-же ничего не понял smile 

Автор: J0ker 27.10.2008, 06:46
Цитата(kostay @  26.10.2008,  23:32 Найти цитируемый пост)
проблема в клавиатуре нету тут букв некоторых 

казнить нельзя помиловать
ыыыыыыыыыыы  smile 

Автор: Rickert 27.10.2008, 07:59
Уже вторая тема этого перца в подобном стиле. Автор - твори ещё smile 
Названия классов и исходник, непосредственно, настолько суровы, что я даже думать над ними боюсь.
Asema... К чему бы это? К апокалипсису не иначе...

P.S.
Я думал - думал, я всё понял - мы слишком тупые чтобы понять. Крепитесь, Братья!

Автор: Lazin 27.10.2008, 09:19
у человека нет многих букаф на клавиатуре, вот и приходится так называть переменные и классы smile

Добавлено через 1 минуту и 7 секунд
возможно, русский - не его родной язык, почитайте комментарии в коде

Автор: Lazin 27.10.2008, 09:39
kostay, убери из деструктора delete this;
ошибки которые ты привел, говорят о том, что ты пытаешься собрать debug версию, с release версией стандартной библиотеки, либо открой Configuranion manager и выбери там release, а потом в настройках multitreaded, либо multithreaded dll, либо там-же выбери Debug, а в настройках multithreaded debug или multithreaded debug dll.
Вообще, версия библиотеки на тот код, который ты привел не должна влиять.

Автор: kostay 27.10.2008, 10:41
ну я и вибирал то дебуг версию то релиз и соответственно мултитхреадед либо дебуг либо ни4его, картинки ето с дебуг версии.
говорюже 4ерез msvs если start without debugging запускал то вот такая хиромань, а если из папки debug потом то ни4его, всё ок.

вот ета цифра из 6 знаков 34536344 меня особо беспокоит, как то она на на4альной стадии у меня вылазила только в другом месте, и 4то ето компилятор там про маллок говорит ни4его не понял.

 ! 
bsa
Используй букву "ч", а не цифру "4"

Автор: xvr 27.10.2008, 11:49
Смотрим сюда
Код

Asema::Asema(){
    _lauta = new int*[8];
    for(int i = 0; i<8;i++) 
        _lauta[i] = new int[i];

и сюда
Код

    for(int i=0; i<8; i++){                        //i - rivit
        for(int j=0; j<8; j++){                    //j - sarakkeet
            _lauta[i][j] = 0;                    //ekaksi kaikki tyhjдt

делаем вывод - массив _lauta должен быть 8х8, а он есть 8х <нечто треугольное>
Строку _lauta[i] = new int[i]; надо заменить на _lauta[i] = new int[8];

Автор: kostay 27.10.2008, 13:41
всё ништяк, спасибо добрый Человек

Автор: Shooroop 28.10.2008, 18:22
Насколько я понял тебе надо выделить матрицу 8х8, а ты выделяешь память под массив треугольник. smile 
если надо всетаки матрицу попробуй 
  _lauta[i] = new int [8]  ;

Код

Asema::Asema(){
    _lauta = new int*[8];
    for(int i = 0; i<8;i++) 
        _lauta[i] = new int [i]  ;        //здесь возможно ошибка!!!!!

    
    for(int i=0; i<8; i++){                        //i - rivit
        for(int j=0; j<8; j++){                    //j - sarakkeet
            _lauta[i][j] = 0;                    //ekaksi kaikki tyhjдt
            
            }

 зы. спасибо что пишешь ч а не 4 ты просто спасаешь наш мозг!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)