c++ - SIGSEGV : Program doesn't execute sequentially

标签 c++ gdb execution segmentation-fault

我的程序收到一个 SIGSEGV,我正在尝试调试。奇怪的是,当我使用 gdb 逐行执行时,程序并没有遵循我认为应该正常执行的流程。

这是我的代码:

#include <iostream>
#include <fstream>

using namespace std;

char * str_reverse(char * s);

int main (int argv, char ** argc){
    char * strinput;

    fstream finput;
    fstream foutput;

    finput.open(argc[1], ios::in);
    finput >> strinput;
    finput.close();

    foutput.open(argc[2], ios::out);
    foutput << str_reverse(strinput);
    foutput.close();

    return 1;
}

char * str_reverse(char * s){
    int len = 0;
    while (s[len] != '\000') len++;
    char * rev = new char[len];
    for (int i = 0; i < len; i++)
        rev[i] = s[len-(i+1)];
    rev[len] = '\000';  
    return rev;
}

这是我在 gdb 中看到的:

18      foutput << str_reverse(strinput);
(gdb) n
19      foutput.close();
(gdb) n
21      return 1;
(gdb) n
11      fstream foutput;
(gdb) n
21      return 1;
(gdb) n

Program received signal SIGSEGV, Segmentation fault.

顺便说一句,该程序正确地完成了它应该做的事情:它打开一个文件,读取一个字符串并将其反向保存在另一个文件中。

最佳答案

the program is not following what I think should be the normal execution flow.

我没有看到任何证据。据我所知,您的程序正在遵循正常的执行流程,然后main 返回后崩溃。

发生这种情况是因为您有一个未初始化的指针 strinput,并且您写入了该指针指向的不可预测位置。

碰巧在您的执行环境中,指针指向堆栈中的某处,因此您损坏了您的堆栈,然后导致您跳转到一个错误的地址,从而导致崩溃。

关于c++ - SIGSEGV : Program doesn't execute sequentially,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835944/

相关文章:

c - GDB 调用不在 main 中的函数

javascript - Android Studio - 任务应用程序 :packageRelease 执行失败

algorithm - 从数学的角度来看,分布式算法的执行是什么?

c++ - PointCloudLibrary (PCL) - 八叉树 - 获取 *branch* 节点内所有点的索引

c++ - SFML - 将对象移向坐标

c++ - 为 OpenGL 的顶点缓冲区对象动态打包数据

python - python 装饰器是否可以根据较早的装饰器结果执行或跳过?

c++ - 寻找最优雅的代码调度器

xcode - 任何人都可以分享示例 .lldbinit 文件吗?

c - 无法在 gdb 上调试 lInux