Hallo.
Ich arbeite gerade an einem "Packer", der mir Daten packt und entpackt. Beim Entpacken gibt es Probleme. Ich benutze folgenden Code um eine Datei aus dem Gepackten zu schreiben:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
int readtofile( const char *filename, const char *archivename )
{
FILE *writefile;
UINT32 len, i;
char buf[1024];
for( i = 0; i < anz; i++ )
{
if( !strcmp( dic[i].name, archivename ) )
break;
}
if( i >= anz )
return 1;
fseek( dat, dic[i].off, SEEK_SET );
len = dic[i].len;
//*******************************
std::string s;
fread(&s, sizeof(std::string), 1, dat);
char* fn = const_cast<char*>(s.c_str());
//*******************************
fopen_s( &writefile, fn, "wb" );
if( writefile == NULL )
return 2;
while( len > 1024 )
{
fread( buf, 1, 1024, dat );
fwrite( buf, 1, 1024, writefile );
len -= 1024;
}
fread( buf, 1, len, dat );
fwrite( buf, 1, len, writefile );
fclose( writefile );
return 0;
}
|
Der Debugger zeigt nirgendwo einen Nullpointer bei den Dateien. Kann man also ausschließen. Die Zugriffsverletzung entsteht erst bei
return 0;
DebugLibary: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Ich weiß nicht mehr weiter, was da falsch ist. Die Datei ist dann vollständig geschrieben. Nur der Absturz nervt ein wenig...
Der Code nach der Funktion, ist der Ausstieg aus der Nachrichtenfunktion von Windows.
Danke für jede Hilfe.