之前用buildroot-2017.08.1编译的根文件系统没有问题
用最新的buildroot-2021.05-rc1编译出来运行Qt程序之后报如下的错误
# ./aaa
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
# ./aaa -platform linuxfb
terminate called after throwing an instance of 'std::bad_alloc'
what():
Qt的配置如下
export QT_ROOT=/usr/lib/qt
export TSLIB_ROOT=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
export QT_QPA_FB_TSLIB=1
请问大家怎么解决呢?
离线
自己顶一下,希望得到大家的帮助
离线
代码呢?是不是申请太多内存了?
我跑了一个最简单的qt侧是程序,就只有两个按钮,没有做任何的功能
离线
https://www.cnblogs.com/BASE64/p/14349333.html
编译出错:
terminate called after throwing an instance of 'std::bad_alloc'what(): std::bad_alloc
分析解决:
【内存不够】:1,确认系统已占用内存是否正常,排除数据量过大导致的问题,此时系统内存不足导致 std::bad_alloc
【内存剩余】:
1,确认接口调用时,调用和背调接口的的参数是否一致,动态库库调用中若不一致,编译链接通过,但执行可能导致 std::bad_alloc
2,确认是否使用vector,vector超容量时会重新申请二倍内存,因为vector会将老的一块内存,完全拷贝到另一块连续容量为2倍的vector内存中,高峰时内存将时当前系统的3倍,此时可能导致 std::bad_alloc
仔细看了下写的代码,想到一个知识点:vector容器的end指向的并不是容器中最后一个元素,而是最后一个元素的下一个元素地址,所以访问了非法内存,故这里的解决方法是:如果要访问容器中最后一个元素,需要将迭代器--,即it--。
参考一下
离线