Показать сообщение отдельно

  #3176  
Старый 15.06.2009, 15:37
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
С нами: 10535289

Репутация: 107


По умолчанию

Подскажите на какой строке в этой ф-ции стек повреждается
Код:
char *listds()
{
HANDLE hh=GetProcessHeap();
char  buff[1024],out[1024];
void  *rbuf=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void  *rbuf1=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void  *rbuf2=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void  *rbuf3=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
char *buf=(char*)rbuf;char *buf1=(char*)rbuf1;char *buf2=(char*)rbuf2;
char *buf3=(char*)rbuf3;
struct {
   UINT type;
   LPCSTR name;    
} DTF [] = {
   { DRIVE_UNKNOWN,     " (Unknown) " },
   { DRIVE_NO_ROOT_DIR, " (Invalid path) " },
   { DRIVE_REMOVABLE,   " (Removable) " },
   { DRIVE_FIXED,       " (Logic Volume) " },
   { DRIVE_REMOTE,      " (Network drive) " },
   { DRIVE_CDROM,       " (CD-ROM) " },
   { DRIVE_RAMDISK,     " (RAM disk) " },
   { 0, NULL},
};
GetLogicalDriveStrings(sizeof(buff)/sizeof(char),buff);
DWORD FBA;DWORD TNOB;DWORD TNOFB;
for(int i=0; i<1024-1; i++)
if( buff[i]==0)
{
if(buff[i+1] != 0)
buff[i] =(char) 0xD;
else
break;
}strcpy(buf,buff);
for(;;)
{
strncpy(buf1,buf,3);buf+=4;
strcat(buf2,buf1);strcat(buf2,DTF[GetDriveType(buf1)].name);
if(GetVolumeInformation(buf1,0,0,0,0,0,0,0)==true)
{
GetDiskFreeSpaceEx(buf1,(PULARGE_INTEGER)&FBA,(PULARGE_INTEGER)&TNOB,(PULARGE_INTEGER)&TNOFB);
sprintf(buf3,"%d",TNOFB/(1024));strcat(buf2,"avalaible kbytes:");
strcat(buf2,buf3);strcat(buf2,"\n");
memset(buf3,NULL,1024);
}
if(GetVolumeInformation(buf1,0,0,0,0,0,0,0)!=true)
{
strcat(buf2,"<No Disk>\n");
}
if(strlen(buf)==0){break;}
}
strcpy(out,buf2);
HeapFree(hh,0,rbuf);
HeapFree(hh,0,rbuf1);
HeapFree(hh,0,rbuf2);
HeapFree(hh,0,rbuf3);
return(out);
}
 
Ответить с цитированием