gpt4 book ai didi

c++ - 函数返回时 Linux c++ system() 调用崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:14 25 4
gpt4 key购买 nike

我有一个自定义的 petalinux 2016.3 系统正在运行并观察以下内容:当我编译并运行一个使用 system() 调用的 cpp 时,我得到:

Oops: kernel access of bad area, sig: 11
CPU: 0 PID: 381 Comm: Application Not tainted 4.6.0 #63
task: ce486500 ti: ce4cc000 task.ti: ce4cc000

我可以在终端中看到所有 3 个回声,但糟糕出现在“我们永远不会到达这里”printf 之前。好像function()返回的时候出现内核访问bad area。

是否缺少某些特定的内核或 rootfs 模块/设置可能导致系统以这种方式运行?

我有数千行运行其他库函数的代码,但似乎只有 system() 失败了。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

using namespace std;

void function(){
system("echo hello");
system("echo hello2");
system("echo hello3");
}

int main(int argc, char **argv){
function();
printf("We never get here\n");
return 1;
}

经过更多调试,问题似乎出在 makefile 中包含的库 (lEasyBmp)。

为什么它在不使用时会触发这个确切的故障我还没有发现。所有库文件都是在系统中构建和找到的,但如果有人有同样的问题,包括一些库可能会触发它。

最佳答案

看起来问题实际上是 system() 函数导致了一些非常奇怪的未定义行为。像下面这样把它们放在 child 身上解决了这个问题:

void forksystem(char* command){
pid_t pid;
int status = 0;
pid = fork();
if(pid == 0){
system(command);
exit(1);
}
wait(&status);
}

关于c++ - 函数返回时 Linux c++ system() 调用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41144813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com