[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    я не уверен но вроде по стандарту после вызова delete/delete[] указатель становится равным NULL, во всяком случае надо глянуть стандарт, а на компилятор полагатся не стоит.
     
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    в стандарте не указано. поэтому лучше прравнивать, а еще лучше исользовать умные указатели. это спасет от утечек памяти.
     
    1 person likes this.
  3. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    пытаюсь скомпилить код, пишет ошибку " Не удается открыть файл include: math: No such file or directory" в чем может быть проблема ? (microsoft visual C++ 2008 express)
    Code:
    
    #include <iostream>
    #include <math>               
    #include <stdio>              
    #include <conio>              
    #include <stdlib>                    
    #include <string>               
    using namespace std;
    
     unsigned long dec=0;                 
     int oct[10],bin[10],hex[10];                
     int len=0;                    
     int count=0;                    
     char *vosm_strchar*)malloc(sizeof(char));         
    
     vvod()                                   
      {
        scanf("%s",vosm_str);                   
        for(int i=0;vosm_str[i];i+                        
         {
          oct[i]=vosm_str[i]-0x30;                    
           if((vosm_str[i]<'0')||(vosm_str[i]>'7'))          
         return 1;                         
         }
        len=i;                              
        return 0;                              
      }
    
    void todec()                       
     {
      for(int i=0;i<len;i+
       dec+oct[i]*(pow(8,len-i-1)));          
     }
    
    void tobin()                    
     {
       for(int i=0;i<len;i+
        switch(oct[i])                     
         {
         case 0: bin[i]=0;break;          
         case 1: bin[i]=1;break;          
         case 2: bin[i]=10;break;
         case 3: bin[i]=11;break;
         case 4: bin[i]=100;break;
         case 5: bin[i]=101;break;
         case 6: bin[i]=110;break;
         case 7: bin[i]=111;break;
         }
      }
    
    void tohex()                    
     {
      int i=0;
      double temp = dec;                   
       while(temp>=16)              
       {
        hex[i]=16*(modf(temp/16, &temp));   
        i++;                                
        count++;                            
        switch(int(hex[i]))
         {
          case 10: hex[i]=0xA;break;        
          case 11: hex[i]=0xB;break;        
          case 12: hex[i]=0xC;break;
          case 13: hex[i]=0xD;break;
          case 14: hex[i]=0xE;break;
          case 15: hex[i]=0xF;break;
         }
       }
       hex[i]=temp;                    
     }
    
    void vuvod()                    
     {
      printf("\nChislo v  8-ou s.s. = %s",vosm_str);
      printf("\nChislo v 10-ou s.s. = %ld",dec);
      printf("\nChislo v  2-ou s.s. = ");
       for(int i=0;i<len;i+               
        printf("%.3d",bin[i]);              
      printf("\nChislo v 16-ou s.s. = ");
       for(i=count;i>=0;i--)              
        printf("%X",int(hex[i]));          
     }
    
    void main()
     {
      clrscr();
       if(vvod()==0)                 
        {
         todec();
         tobin();
         tohex();
         vuvod();
        }
       else
        puts("Chislo zapizano ne v 8-ou s.s.");
      getch();
                     
     }
     
    #2863 s_p_a_m, 4 May 2009
    Last edited: 4 May 2009
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    в отсутствии файла math ))
    попробуй написать math.h
    или возьми его из другой версии типа VC++ 6.0
    МЫ 2008 сильно урезан во многих модулях. хотя этот должен быть
     
  5. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    В с++ в названиях всех сишных хэдэров должен быть префикс "c",
    example:
    #include <cstdio>
    #include <cstring>

    не имеют права это хэдэр со стандартной либы) каким бы не был экспресс билд, стандарт он должен поддерживать полностью.
     
    #2865 razb, 4 May 2009
    Last edited: 4 May 2009
  6. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    Не удается открыть файл include: conio: No such file or directory :( уже как только не писал,и #include <conio>, и #include <cconio>, бесполезно :(
     
  7. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    файл conio.h это чисто борландовский хэдэр который не входит ни в какие стандарты, по этому его надо обьявлять в си-стиле #include <conio.h>
     
  8. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    лучше приравнивай.а ещё лучше - сразу следи, чтобы не обратиться к нему после делита. но всё равно обнули)
     
  9. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    отследить легко в хеллоуворлде. а в даже чуть более крупной ЛАБЕ, не то что в коммерческом проекте, можно банально проморгать удаление вектора. потом получается магическая ошибка, когда вызывается метод, но почему то данные неправильные. а все потому, что объект класса имеет указатель this, который убивается делитом, но не приравнивается нулю, и поэтому его можно разыменовать и получить данные. кароч кто видел такие моменты тот меня поймет, када в окне дебаг this = 0x00fea34d. это ацкие ошибки, которые могут вынести мозг и убить на дебаггинг лютые часы. поэтому обнулять обязательно. но еще лучше не юзать чистые указатели для хранения динамических объектов. смарт поинтеры решают.
     
    1 person likes this.
  10. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    короч вот простой пример проблем, порождаемых ленивой работой с указателями

    Code:
    class A{
    public:
    	A(){};
    	A(int _x1, int _x2, int _x3){
    		x1 = _x1;
    		x2 = _x2;
    		x3 = _x3;
    	};
    	~A(){};
    
    	void f1 (){
    		y = x1 + x2 - x3;
    	}
    
    protected:
    	int x1, x2, x3;
    	int y;
    };
    
    class B{
    public:
    	B(int _x1, int _x2, int _x3){
    		a = new A(_x1, _x2, _x3);
    	};
    	~B(){
    		delete a;
    	}
    	
    	void f1(){
    		a->f1();
    	}
    protected:
    	A* a;
    };
    
    int main(void)
    {
    
    	B* b;
    	b = new B(45, 5, 15);
    	delete b;
    	b->f1();
    
    	system("pause");
    	return 0;
    }
    дебажить заходя внутрь методоа f1 сначала в классе B потом в A. В A имеем следующую картинку

    + this 0xfeeefeee {x1=??? x2=??? x3=??? ...} A * const

    причина проста - не обнулен указатель b после делита.
    программа будет крашица, но причиной ошибки является не это место. на поиск реального места уйдет драгоценное время. это кстати опять же зависит от компилера и системы. чем заполняется освободившееся место. тут ошибка только благодаря тому что там нет страницы. попробуйте руками изменить адрес this на число например 0x00401000 =) вообще никакой ошибки. это повлечет еще более веселый дебаггинг. и это тот самый тип ошибок, который зависит от сосотяния адресного простарнства процесса. которые не повторяются при выполнении одной и той же послеовательности действий...

    delete b;
    b = 0;
    b->f1();

    исправляете так и легко узнаете о попытке обратиться к несуществующему объекту.
     
  11. .ATK

    .ATK Active Member

    Joined:
    20 Feb 2009
    Messages:
    143
    Likes Received:
    111
    Reputations:
    9
    Дайте рабочего кода (winapi) с мониторингом физич. памяти, не важно, что: размер дисков, общий объём физ.памяти и т.д.
     
    3 people like this.
  12. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    Помогите, пожалуйста, как в QT сделать кнопку и прогресс бар, что бы при нажатие на кнопку импортировались значения в реестр и показывало на прогресс баре состояние импорта.
     
  13. 4y4o

    4y4o Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    40
    Likes Received:
    2
    Reputations:
    0
    Хлопцы а хто может с JAVA помочь ? Дайте асю.
     
  14. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    я так понимаю импорт будет идти в цикле? если так то после каждой итерации изменяй значение на прогрессбаре, а вообще в документации все хорошо расписано как работать с виджетами.
     
  15. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    только еще нужно расчитать, чтоб ровномерно. Иначе может быть циклов 300, а прогресс бар, при каждом вызове, увеличивает на 1%(ну так в GTKmm если не ошибаюсь), и наоборот, 10 циклов, 10 вызовов и всего 10%.
     
  16. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Темой ошибся, https://forum.antichat.ru/thread90173.html
     
  17. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    razb, Glazz можете на примере показать? Цикл и изменение прогресс бара.
     
  18. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    я пока ни разу не использовал прогрессбары, толкьо читал. Вот учебник на сайте gtkmm.org(т.е. на gtkmm как это выглядит) , тут объяснения и пример.
    http://gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-progressbar.html

    Если нужны все методы класса, то покапайся в доках. Если не на си++ то смотри доки по gtk+
     
  19. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Подскажите пожалуйста консольную простую среду разработки для win приложений. Минимум излишеств - требуется для начального обучения синтаксису и т д
    Ну что то вроде g++ в никсах :)
     
  20. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    lcc или mingw поставь
     
    _________________________
Thread Status:
Not open for further replies.