'fopen'返回格式错误的'fp'
'fopen' returns malformed 'fp'
环境
- Ubuntu 16.x (x64(
- C++
用例
FILE* fp = 0;
if (ERROR_SUCCESS != stat(pFullPath, &st)) {
if (0 == (fp = fopen(pFullPath, "w+b")))// Create The File
return HRESULT_GET_ERRNO();
_ASSERT(0 != fileno(fp));
问题描述
fopen 总是成功返回有效的指针
偶尔的"fileno"返回零和m_pf->_fileno == 0
什么可能导致畸形的"fp
"?
"m_fp"转储
_flags -72539008 int
_IO_read_ptr 0x0 char *
_IO_read_end 0x0 char *
_IO_read_base 0x0 char *
_IO_write_base 0x0 char *
_IO_write_ptr 0x0 char *
_IO_write_end 0x0 char *
_IO_buf_base 0x0 char *
_IO_buf_end 0x0 char *
_IO_save_base 0x0 char *
_IO_backup_base 0x0 char *
_IO_save_end 0x0 char *
_markers 0x0 _IO_marker *
_chain 0x7fe6368cf540 <_IO_2_1_stderr_> _IO_FILE *
_fileno 0 int
_flags2 0 int
_old_offset 94543438232832 __off_t
_cur_column 0 unsigned short
_vtable_offset 7 'a' signed char
_shortbuf char [1]
_lock x55fc9c068e50 _IO_lock_t *
_offset -1 __off64_t
__pad1 0x55fc9c070210 void *
__pad2 0x55fc9c068e60 void *
__pad3 0x0 void *
__pad4 0x7fe644d41a93 void *
__pad5 0 size_t
_mode 0 int
_unused2 char [20]
在调用fopen
之前关闭描述符 0 可以(并且将(导致重用 0。此机制通常用于在 exec 之前设置子进程标准输入。
在程序启动之前关闭标准输入(通过 exec(也会导致第一个打开的文件获得描述符 0。
程序中未定义的行为可能会导致任何事情,随机...
此外,也许您的代码的行为与您预期不同。除了断言之外,还添加调试打印。检查它是否断言 wih invslid 文件。等。
除此之外,您提供的信息都不能说。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 'fopen'返回格式错误的'fp'
- 使用FP:快速导致错误的VC 结果(不仅仅是不准确)结果 - 这是编译器错误
- VS2013:带有float和/EHa+/fp:strict的编译器错误