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


Автор: Toohtik 4.5.2007, 19:36
Решил написать класс, по орпделению железа, которое установлено в компе. Сейчас пишу функцию по определению логических дисков, их букв типов....
Код

LogicDrives* MyComputer::DefineLogicDrives(void)
{
    MaskOfLD = GetLogicalDrives();
    LogicDrives *temp=NULL;
    int n=1;
    TCHAR p;
    for(int i=0;i<26;i++)
    {
        if((MaskOfLD>>i)&0x00000001)
        {
            temp=(LogicDrives*) realloc (temp,n*sizeof(LogicDrives));
            temp[n].Name=TCHAR(65+i);
            n++;
        };
    }
    return temp;    
};

По идеи в переменной temp[].name должна быть буква логического диска, но вместо ней там мусор. В чем я ошибся?

Автор: JackYF 4.5.2007, 20:06
Цитата(Toohtik @  4.5.2007,  19:36 Найти цитируемый пост)
temp=(LogicDrives*) realloc (temp,n*sizeof(LogicDrives));


Может, ошибка и не здесь... но нету проверки: а вдруг realloc вернет NULL?


Цитата(Toohtik @  4.5.2007,  19:36 Найти цитируемый пост)
MaskOfLD

какого типа переменная?


А вообще, тему в раздел WinAPI надо переносить.

Автор: Partizan 4.5.2007, 20:37
а в другую сторону смещать не пробовал? =)

Код

int i,k=1;
char Let;

  for (i = 0;i <= 25; i++){
      if ( ( GetLogicalDrives() & (k << i) ) != 0){
          Let=toascii('a') + i;
      }
  }


у меня работало на ура...
getLogicalDrives мона и вынести за пределы цикла)

Автор: Toohtik 4.5.2007, 21:05
Та со сдвигами у меня все ок, количество дисков считает правильно, я думаю может я напорол с присвоением...

Автор: Toohtik 4.5.2007, 22:57
Ошибка найдена
Код

    for(int i=0;i<26;i++)
    {
        if((MaskOfLD>>i)&0x00000001)
        {
            temp =(LogicDrives*) realloc (temp,n*sizeof(LogicDrives));            
            if(temp)
            {
                temp[n-1].Name=TCHAR(65+i);
                n++;
            }
        };
    }

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