ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #2871  
Старый 02.05.2009, 15:37
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

как-то так.. )
Код:
#include <windows.h>
#include <stdio.h>
#include <string>

using namespace std;
#define MAX_PATH 512

// если найдено ".." или "." - пропускаем
bool is_dots(const char* dir){
        if (strcmp(dir, ".")==0) return true;
        if (strcmp(dir, "..")==0) return true;
        return false;
}

// рекурс. скан. директории
void scan_directory(const char* dir, const char* mask){

        char filemask[MAX_PATH];
        char temp[MAX_PATH];
        sprintf(filemask, "%s\\%s", dir, mask); // полный путь в filemask

        WIN32_FIND_DATA wf;
        HANDLE hf = FindFirstFile(filemask, &wf); // ищем первый
        if (hf != INVALID_HANDLE_VALUE){
                do{
                        if (!is_dots(wf.cFileName)){ // если найдено не ".." или "."
                                if (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ // если найдено папку
                                        char buf[MAX_PATH];     
                                        sprintf(buf, "%s\\%s", dir, wf.cFileName);
                                        scan_directory(buf, mask);      // вызываем сами себя
                                }
                                else {
                                        if (strcmp(wf.cFileName, ".exe")>=0) { // если в имени ".ехе"
                                           sprintf("%s\\%s", temp, dir, wf.cFileName);
                                           WinExec(temp,SW_SHOW); // запускаем файл
                                        }
                                }
                                        
                        }
                }while (FindNextFile(hf, &wf)); // ищем след.
                FindClose(hf); // конец поиска
        }
}

int main(int argc, char** argv){
        WIN32_FIND_DATA wf;
        scan_directory("С:", "*.exe");
        return 0;
}
 

  #2872  
Старый 02.05.2009, 22:16
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

в книге "С++ за 21 день" после выделения и удаления динамической памяти
PHP код:
int *num = new int;
delete num
рекомендуется обязательно приравнять указатель к нулю
PHP код:
*num 0
я использую связку Eclipse + плагин С++ + minGW.
И там даже без последней строчки указатель всегда становится равен нулю.

Как вы считаете, рекомендация ставить 0 - архаизм или же нельзя это игнорировать, только потому что мой компилятор делает это за меня.
 

  #2873  
Старый 02.05.2009, 22:40
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

>>рекомендуется обязательно приравнять указатель к нулю

а зачем - там не написано?
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 

  #2874  
Старый 02.05.2009, 23:04
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

написано, что если обращаться к указателю у которого память уже высвобождена delete-ом, но не присвоен нуль - будут самые неявные ошибки, вплоть до зависания.

а мой компилятор сам приравнивает к нулю.

хочу понять - щас все компиляторы уже это делают, или тока мой имеет такую фичу.
 

  #2875  
Старый 03.05.2009, 00:04
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

я не уверен но вроде по стандарту после вызова delete/delete[] указатель становится равным NULL, во всяком случае надо глянуть стандарт, а на компилятор полагатся не стоит.
 

  #2876  
Старый 03.05.2009, 19:29
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

в стандарте не указано. поэтому лучше прравнивать, а еще лучше исользовать умные указатели. это спасет от утечек памяти.
 

  #2877  
Старый 04.05.2009, 12:03
s_p_a_m
Участник форума
Регистрация: 08.02.2008
Сообщений: 116
Провел на форуме:
1608432

Репутация: 158
По умолчанию

пытаюсь скомпилить код, пишет ошибку " Не удается открыть файл include: math: No such file or directory" в чем может быть проблема ? (microsoft visual C++ 2008 express)
Код:
#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();
                 
 }

Последний раз редактировалось s_p_a_m; 04.05.2009 в 12:09..
 

  #2878  
Старый 04.05.2009, 12:14
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

в отсутствии файла math ))
попробуй написать math.h
или возьми его из другой версии типа VC++ 6.0
МЫ 2008 сильно урезан во многих модулях. хотя этот должен быть
 

  #2879  
Старый 04.05.2009, 13:28
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
в отсутствии файла math ))
попробуй написать math.h
В с++ в названиях всех сишных хэдэров должен быть префикс "c",
example:
#include <cstdio>
#include <cstring>

Цитата:
или возьми его из другой версии типа VC++ 6.0
МЫ 2008 сильно урезан во многих модулях. хотя этот должен быть
не имеют права это хэдэр со стандартной либы) каким бы не был экспресс билд, стандарт он должен поддерживать полностью.

Последний раз редактировалось razb; 04.05.2009 в 13:34..
 

  #2880  
Старый 04.05.2009, 14:20
s_p_a_m
Участник форума
Регистрация: 08.02.2008
Сообщений: 116
Провел на форуме:
1608432

Репутация: 158
По умолчанию

Цитата:
Сообщение от razb  
В с++ в названиях всех сишных хэдэров должен быть префикс "c",
example:
#include <cstdio>
#include <cstring>


не имеют права это хэдэр со стандартной либы) каким бы не был экспресс билд, стандарт он должен поддерживать полностью.
Не удается открыть файл include: conio: No such file or directory уже как только не писал,и #include <conio>, и #include <cconio>, бесполезно
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ