c++ - 将缓冲区/指针设置为空

标签 c++ pointers buffer fread

我试图不断地从不同文件中将数据读入类型为 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/

相关文章:

c++ - boost::dynamic_bitset 如何存储位

c - 用指针打印字符的问题

c - 如何在 C 中转换二维数组?

java - 如何创建与旧窗口不同步的 jEdit "New View"

c++ - 使用 cpp_int 构建一个大的 boost unordered_map

c++ - 删除结构 c++ vector 中的重复项

pointers - 如何在 golang 中获取指向通过 interface{} 传递的结构的指针?

c++ - 如何在(视频)内存中创建缓冲区以使用 OpenGL 进行绘制?

python - GzipFile 中的缓冲

c++ - 计算 vector 中的元素属性