尽管文件指针正确,但在fclose()期间的segfault
Segfault during fclose() despite correct file pointer
- 在物体破坏期间持续发生;
- fopen((和fclose((之前的文件指针值相同;
- fclose((仅在对象驱动器中称为一次;
- 该对象是静态创建的,并在范围末尾被破坏
- 文件仅在一个线程中处理
文件打开:
logOutFile_fd = fopen(logOutFile,"w");
if (logOutFile_fd==NULL) {
/* omitted */
}
文件关闭:
if (logOutFile_fd!=NULL) {
fflush(logOutFile_fd);
fclose(logOutFile_fd);
}
我用" -g3"编译,并通过GDB跑,这是完整的回溯:
#0 0x00007ffff6f8d3f8 in raise () from /lib64/libc.so.6
No symbol table info available.
#1 0x00007ffff6f8effa in abort () from /lib64/libc.so.6
No symbol table info available.
#2 0x00007ffff6fcf6f9 in __libc_message () from /lib64/libc.so.6
No symbol table info available.
#3 0x00007ffff6fd7f4a in _int_free () from /lib64/libc.so.6
No symbol table info available.
#4 0x00007ffff6fdbc1c in free () from /lib64/libc.so.6
No symbol table info available.
#5 0x00007ffff6fc52c3 in fclose@@GLIBC_2.2.5 () from /lib64/libc.so.6
No symbol table info available.
#6 0x0000000000402733 in t_netInterface::~t_netInterface (this=0x7ffff5f50cf0, __in_chrg=<optimized out>) at connect.cpp:59
No locals.
#7 0x00000000004022fc in pthreadTask (pthData=0x7fffffffe070) at client.cpp:131
netInterface = {id = 162, currTime = {tv_sec = 0, tv_usec = 0}, dbg_time_sync = {tv_sec = 0, tv_usec = 0}, dbg_time_prev = 0, dbg_time_now = 0,
dbg_time_dprev = 0, dbg_time_dnow = 0, dbg_ch0_len = 0, datems = 0, timeMarkSet = {0 <repeats 12 times>}, chunk = 0, chunk_ch = 0 ' 00',
chunk_dt = 0, chunk_H = 0 ' 00', chunk_L = 0 ' 00', fpd = 0x0, logOutFile = 0x0, logOutFile_fd = 0x7fffec038f30,
dataOutFile = 0x7fffec001c10 "(b", dataOutFile_fd = 0x7fffec03a580, globalLogFile_fd = 0x7fffec0009d0, dir0 = 0x7fffec001d20 "(b", sockfd = 11,
portno = 34000, serv_addr = {sin_family = 2, sin_port = 53380, sin_addr = {s_addr = 2717952192}, sin_zero = " 00 00 00 00 00 00 00"},
poll_d = {{fd = 11, events = 1, revents = 0}}, f_ret = 0, channelBuffers = 0x7fffec000920, channelBuffIter = 0x7fffec0008e0,
channelDataTypeH = 1284, valSigned = 0, dbgFlag = 0, dataPath = 0x7fffec006d50 "(b", addr_str = 0x7fffec002530 "192.168.0.162",
buffChar = 0x7fffec002d40 "(b", wasConnected = 0}
data = 0x7fffffffe070
out_buffer = 64
in_buffer = {0 <repeats 8192 times>}
pid = 162
tid = 162
logOutFile_fd = 0x7fffec038f30
res = 1
rcvDataSizeBytes = 0
retv = 0
cc = 2003
active = 0
uptimeSec = 27134
globalLogName = 0x7fffec0008c0 "x"
globalLogFile_fd = 0x7fffec0009d0
#8 0x00007ffff7328684 in start_thread () from /lib64/libpthread.so.0
No symbol table info available.
#9 0x00007ffff705eefd in clone () from /lib64/libc.so.6
No symbol table info available.
我在做什么错?预先感谢。
编辑:我试图在周围调整换口具,现在看上去似乎就像是在类构造函数和destructor之间的某个位置的内存。我将重新完成一些事情,因此可以将问题视为关闭。无论如何,感谢您的时间。
fclose中的崩溃表明涉及的FILE
数据结构已损坏,可能是由于程序中其他地方使用的无效指针。
您最好的选择可能是一个内存检查工具,例如Valgrind
相关文章:
- C++中带有List类的迭代器Segfault
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::partition segfault issue
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- 检查nullptr是否100%保护内存布局不受segfault影响
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 有没有办法关闭文件? fclose 不能很好地工作
- 为什么优化大型 std::vector 数组会导致 SegFault?
- C++segfault,可重复的例子
- 带有zip_source_buffer的libzip会导致数据损坏和/或segfault
- 导致SegFault C++的析构函数
- 从引用的Vector获取SEGFAULT
- 尝试读取/写入Graphviz DAG值的工作证明会导致segfault
- Segfault如果更改派生类的指针值
- SegFault deleting QTreeWidgetItem
- PyImport_Import segfault
- 添加#pragma循环后出现Segfault
- 使用 gmock 时的 SegFault
- 尽管文件指针正确,但在fclose()期间的segfault