为了从一个文件中读取数据,我创建了堆内存,然后将变量指针传递给一个函数,这样fread()
就会将文件数据放入指针中。但是当函数返回时,新创建的内存中没有数据。
int main(...) {
MyFile File;
File.Open(...);
int filesize = File.Tell();
char* buffer = new buffer[filesize]; // Create some memory for the data
File.Read((char**)&buffer);
// Now do something with the buffer. BUT there is trash in it.
File.Close();
delete [] buffer;
}
size_t File::Read(void* buf) {
...
::fseek(fStream, 0, SEEK_END);
int fileSize = ::ftell(fStream); // Get file size.
::fseek(fStream, 0, SEEK_SET);
::fread(buf, 1, fileSize, fStream);
return (fileSize);
}
是的,我可以将char * myBuffer = new char[fileSize];
放在::fread(myBuffer, 1, fileSize, fStream);
之前的File::Read(...)
中,但我不应该这样做,因为我已经在main()
中有堆内存(buffer
)。
1条答案
按热度按时间kokeuurv1#
你将文件内容读入指针
buffer
,而不是它指向的数组。不管怎么说,你把事情弄得太复杂了。你不需要一个指向指针的指针,或者一个
void*
。你可以简单地把一个char*
传递给Read
。你真的应该把所指向的缓冲区的大小也传递给Read
。否则你就有溢出缓冲区的危险。