我试图不断地从不同文件中将数据读入类型为 unsigned char* 的缓冲区。但是,我似乎无法在读取下一个文件之前将缓冲区设置为 NULL。
这里只给出相关代码:
#include <stdio.h>
#include <fstream>
int
main (int argc, char** argv) {
FILE* dataFile = fopen("C:\\File1.txt", "rb");
unsigned char *buffer = NULL;
buffer = (unsigned char*)malloc(1000);
fread(buffer,1,1000,dataFile);
fclose(dataFile);
dataFile = fopen("C:\\File2.txt", "rb");
buffer = NULL;
fread(buffer,1,1000,dataFile);
fclose(dataFile);
system("pause");
return 0;
}
我遇到的错误是在该行的第二次出现处:fread(buffer,1,1000,dataFile);
我得到的错误是:
Debug Assertion Failed! Expression: (buffer != NULL)
它指向 fread.c 的第 147 行,基本上是:
/* validation */ _VALIDATE_RETURN((buffer != NULL), EINVAL, 0); if (stream == NULL || num > (SIZE_MAX / elementSize)) { if (bufferSize != SIZE_MAX) { memset(buffer, _BUFFER_FILL_PATTERN, bufferSize); } _VALIDATE_RETURN((stream != NULL), EINVAL, 0); _VALIDATE_RETURN(num <= (SIZE_MAX / elementSize), EINVAL, 0); }
我在谷歌上搜索了将缓冲区指针设置为 NULL 的方法,并尝试了各种建议,但似乎都没有用。任何人都可以阐明将其设置为 NULL 的正确方法是什么?
最佳答案
您的缓冲区
是一个指针。
当你这样做时:
buffer = (unsigned char*)malloc(1000);
你在内存中分配一些空间,并将它的起始位置分配给buffer
。记住,buffer
保存的是空格开头的地址,仅此而已。当您这样做时:
buffer = NULL;
你已经丢弃了那个地址。
编辑:
C++ 风格,没有动态内存:
#include <fstream>
using std:: string;
using std:: ifstream;
void readFromFile(string fname)
{
char buffer[1000];
ifstream fin(fname.c_str());
fin.read(buffer, sizeof(buffer));
// maybe do things with the data
}
int main ()
{
readFromFile("File1.txt");
readFromFile("File2.txt");
return 0;
}
无需删除缓冲区的内容。如果每次调用分配和释放缓冲区的成本太大,只需添加 static
:
static char buffer[1000];
每次都会被覆盖
关于c++ - 将缓冲区/指针设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078917/