期望malloc函数的大小不同
Different size of expected malloc function
解决方案可能是微不足道的,但我不是生动的cpp。
执行代码后,function strlen((char*)buffer)
的值比我想象的要高。为什么呢?我怎样才能修好它?(if filesize=48, than strlen((char*)buffer)=64
也应该是48!)
ifstream iffile;
iffile.open(argv[1], ios::in | ios::binary | ios::ate);
if (iffile.is_open())
{
long filesize = iffile.tellg();
if (filesize > 0)
{
iffile.seekg(0, ios::beg);
{
long pos = iffile.tellg();
if (pos != filesize)
{
char *buffer;
buffer = (char *)malloc(filesize * sizeof * buffer);
if (buffer != NULL)
{
memset(buffer, 0, filesize - pos);
iffile.read((char *)buffer, filesize);
此外,我不得不提到,在我的文件中有很多不可打印的值
您的代码假设文件包含一个终止的' '
字符,以使字符数组成为字符串。这个终止符是strlen()
寻找的,所以如果它不在那里,您必须添加它。
一种确定的方法是malloc()
(应该是new[]
或c++中更花哨的东西)比file_size
多1个字符,并在加载后将其设置为' '
。
此外,您必须检查分配和I/O是否成功。
不要在c++中使用malloc
;
选项1
用new
代替;
buffer = new char[filesize]
你必须使用delete[]
来释放你用完的内存
选项2
你也不应该在c++中使用原始指针(好吧,如果你知道你在做什么,感觉100%,喝一杯好咖啡,通常是勇敢的,你可以)。
在这种情况下,我想我会使用std::vector<char>
。
std::vector<char> buffer(filesize);
iffile.read(&buffer.front(), filesize);
这样,std
库为您管理内存
相关文章:
- 是否可以像这样编写c malloc函数代码
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 是否有理由使用 malloc 初始化构造函数中的指针
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- Turbo C++:为 malloc 函数生成目标代码
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 为什么在malloc中没有调用构造函数
- 更改 malloc 函数分配空间
- C++ 中的 malloc 和构造函数
- malloc函数的分段错误
- 当退出 new/malloc 函数时,从 new/malloc 返回的指针如何保持在范围内
- 当动态分配数组的函数被多次调用时,malloc 出错
- 在模板化类的构造函数中使用 malloc
- 如何使用 calloc/malloc 等函数对动态创建的存储进行正确排序,使其以 FIFO 方式运行
- malloc/new在函数指针内失败
- malloc.c:3097: sYSMALLOc:断言在动态创建的对象的构造函数中失败
- main()或任何其他函数之外的Malloc(即在全局范围内)
- 期望malloc函数的大小不同