прекращение вызова после создания экземпляра ‘std :: logic_error’

Я использую C ++ для программы, получающей информацию о файлах. Среди них я хочу узнать MIME-тип данного файла.

Для этого я использую libmagic следующим образом:

#include <iostream>
#include <string>
#include <magic.h>

void foo (std::string path)
{
magic_t magic;
magic = magic_open (MAGIC_MIME_TYPE);
magic_load(magic, NULL);
magic_compile(magic, NULL);
std::string filetype (magic_file(magic, path.c_str()));
magic_close(magic);

std::cout << filetype << std::endl;
}

int main(int argc, char *argv[])
{
std::string str = "test.cxx";

foo (str);

return 0;
}

Примерить компьютер под управлением Debian Jessie с gcc 4.9.2 а также glibc 2.19, это работает просто отлично.

Тем не менее, на другом компьютере на Arch Linux с gcc 5.1.0 а также glibc 2.21У меня есть следующее во время выполнения:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_S_construct null not valid

gdb дает мне дополнительную информацию:

Program received signal SIGABRT, Aborted.
0x00007ffff6fb1528 in raise () from /usr/lib/libc.so.6

#0  0x00007ffff6fb1528 in raise () from /usr/lib/libc.so.6
#1  0x00007ffff6fb293a in abort () from /usr/lib/libc.so.6
#2  0x00007ffff78c9b3d in __gnu_cxx::__verbose_terminate_handler ()
at /build/gcc/src/gcc-5-20150519/libstdc++-v3/libsupc++/vterminate.cc:95
#3  0x00007ffff78c7996 in __cxxabiv1::__terminate (handler=<optimized out>)
at /build/gcc/src/gcc-5-20150519/libstdc++-v3/libsupc++/eh_terminate.cc:47
#4  0x00007ffff78c79e1 in std::terminate ()
at /build/gcc/src/gcc-5-20150519/libstdc++-v3/libsupc++/eh_terminate.cc:57
#5  0x00007ffff78c7bf8 in __cxxabiv1::__cxa_throw (obj=0x613fb0,
tinfo=0x7ffff7baea78 <typeinfo for std::logic_error>,
dest=0x7ffff78dd040 <std::logic_error::~logic_error()>)
at /build/gcc/src/gcc-5-20150519/libstdc++-v3/libsupc++/eh_throw.cc:87
#6  0x00007ffff78f08bf in std::__throw_logic_error (
__s=__s@entry=0x7ffff7976100 "basic_string::_S_construct null not valid")
at /build/gcc/src/gcc-5-20150519/libstdc++-v3/src/c++11/functexcept.cc:74
#7  0x00007ffff790acef in std::string::_S_construct<char const*> (__beg=<optimized out>,
__end=<optimized out>, __a=...)
at /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:577
#8  0x00007ffff790b0e6 in _S_construct_aux<char const*> (__a=..., __end=<optimized out>,
__beg=0x0)
at /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:4136
#9  _S_construct<char const*> (__a=..., __end=<optimized out>, __beg=0x0)
at /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string---Type <return> to continue, or q <return> to quit---
.h:4157
#10 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (
this=0x7fffffffe980, __s=0x0, __a=...)
at /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:659
#11 0x0000000000400df3 in foo (path="test.cxx") at test.cxx:11
#12 0x0000000000400ece in main (argc=1, argv=0x7fffffffeae8) at test.cxx:21

Так что я не совсем уверен, смогу ли я решить мою проблему, или есть возможная ошибка, исходящая от glibc или libmagic?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]