标签: segmentation-fault

如何在C++中通过引用返回一个类对象?

我有一个名为Object的类,它存储一些数据.

我想通过引用使用如下函数返回它:

    Object& return_Object();
Run Code Online (Sandbox Code Playgroud)

然后,在我的代码中,我会这样称呼它:

    Object myObject = return_Object();
Run Code Online (Sandbox Code Playgroud)

我编写了这样的代码并编译.但是,当我运行代码时,我总是遇到一个seg错误.通过引用返回类对象的正确方法是什么?

c++ reference segmentation-fault return-by-reference

35
推荐指数
4
解决办法
9万
查看次数

无法执行命令:分段错误:11 swift前端命令因信号失败(使用-v查看调用)

我有一个iOS swift程序,可以在Xcode Beta2上编译和运行.当我下载beta4时,我纠正了新的快速语言的一些语法错误.我现在得到这个错误:

<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

问题是它没有告诉我这个错误在哪里,所以我可以进一步解决它.在哪里可以键入-v以"查看调用"并进一步排除故障?没有这个,绝对没有办法找出问题所在.提前致谢.

xcode segmentation-fault ios swift

35
推荐指数
5
解决办法
4万
查看次数

什么是C++中的SIGSEGV运行时错误?

我需要知道分段错误的根本原因,也可以告诉我如何处理它.

segmentation-fault

33
推荐指数
5
解决办法
9万
查看次数

从函数返回指针

我试图从函数返回指针.但我得到分段错误.有人请告诉代码有什么问题

#include<stdio.h>
int *fun();
main()
{
    int *ptr;
    ptr=fun();
    printf("%d",*ptr);

}
int *fun()
{
    int *point;
    *point=12;  
    return point;
}   
Run Code Online (Sandbox Code Playgroud)

c pointers segmentation-fault

33
推荐指数
2
解决办法
11万
查看次数

Segfault声明类型为vector <shared_ptr <int >>的变量

这是给出段错误的程序.

#include <iostream>
#include <vector>
#include <memory>

int main() 
{
    std::cout << "Hello World" << std::endl;

    std::vector<std::shared_ptr<int>> y {};  

    std::cout << "Hello World" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当然,程序本身绝对没有错.segfault的根本原因取决于其构建和运行的环境.


背景

我们在亚马逊上使用构建系统,该系统以几乎与机器无关的方式构建和部署二进制文件(libbin).对于我们的情况下,基本上意味着它部署的可执行文件(从上面的程序内置)到和几乎所有的依赖(即共享库)进入.为什么我使用的短语"几乎"是因为共享库,比如,,和可能的其他几个人,从系统(即从可执行选秀权).请注意,这是应该挑选从不过.$project_dir/build/bin/$project_dir/build/lib/libc.solibm.sold-linux-x86-64.so.2/lib64libstdc++$project_dir/build/lib

现在我运行如下:

$ LD_LIBRARY_PATH=$project_dir/build/lib ./build/bin/run

segmentation fault
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行它,而不设置LD_LIBRARY_PATH.它运行正常.


诊断

ldd

以下是ldd这两种情况的信息(请注意,我编辑了输出,以便在存在差异的地方提及库的完整版本)

$ LD_LIBRARY_PATH=$project_dir/build/lib ldd ./build/bin/run

linux-vdso.so.1 =>  (0x00007ffce19ca000)
libstdc++.so.6 => $project_dir/build/lib/libstdc++.so.6.0.20 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc redhat ld segmentation-fault

33
推荐指数
2
解决办法
1086
查看次数

为什么const int main = 195导致一个工作程序,但没有const它会以分段错误结束?

考虑使用C程序(请参阅此处的实时演示).

const int main = 195;
Run Code Online (Sandbox Code Playgroud)

我知道在现实世界中没有程序员编写这样的代码,因为它没有任何用处,也没有任何意义.但是当我const从程序上方删除关键字时,它会立即导致分段错误.为什么?我很想知道这背后的原因.

GCC 4.8.2在编译时会发出以下警告.

警告:'main'通常是一个函数[-Wmain]

const int main = 195;
          ^
Run Code Online (Sandbox Code Playgroud)

为什么const关键字的存在和缺失会对程序的行为产生影响?

c program-entry-point const segmentation-fault

32
推荐指数
2
解决办法
3958
查看次数

在Unix上启用优化时,strcpy()/ strncpy()在结构成员上崩溃并有额外的空间?

在编写项目时,我遇到了一个奇怪的问题.

这是我设法编写的用于重新创建问题的最小代码.我故意将一个实际的字符串存储在其他地方,并分配了足够的空间.

// #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stddef.h> // For offsetof()

typedef struct _pack{
    // The type of `c` doesn't matter as long as it's inside of a struct.
    int64_t c;
} pack;

int main(){
    pack *p;
    char str[9] = "aaaaaaaa"; // Input
    size_t len = offsetof(pack, c) + (strlen(str) + 1);
    p = malloc(len);
    // Version 1: crash
        strcpy((char*)&(p->c), str);
    // Version 2: crash
        strncpy((char*)&(p->c), str, strlen(str)+1);
    // Version 3: works!
        memcpy((char*)&(p->c), str, strlen(str)+1); …
Run Code Online (Sandbox Code Playgroud)

c struct segmentation-fault compiler-optimization strcpy

32
推荐指数
3
解决办法
2195
查看次数

Linux上的分段错误是什么?

在Linux中:

什么是分段错误?我知道它会崩溃程序,但这是某种内存泄漏问题,还是完全不相关的东西?另外,你如何处理这些?这通常是计算机设置或应用程序本身的问题吗?

此外,这是否也发生在其他操作系统中?

segmentation-fault

31
推荐指数
2
解决办法
6万
查看次数

为什么PHP中的无限递归函数会导致段错误?

一个假设的问题,你们都要咀嚼......

我最近在SO上回答了另一个问题,其中一个PHP脚本是segfaulting,它让我想起了我一直想知道的东西,所以让我们看看是否有人可以对它有所了解.

考虑以下:

<?php

  function segfault ($i = 1) {
    echo "$i\n";
    segfault($i + 1);
  }

  segfault();

?>
Run Code Online (Sandbox Code Playgroud)

显然,这个(无用的)函数无限循环.最终,由于每个对函数的调用都是在前一个调用完成之前执行的,因此会耗尽内存.有点像没有分叉的叉形炸弹.

但是......最终,在POSIX平台上,脚本会死于SIGSEGV(它也会死在Windows上,但更优雅 - 只要我极其有限的低级调试技能可以说明).循环次数取决于系统配置(分配给PHP的内存,32位/ 64位等)和操作系统,但我真正的问题是 - 为什么会发生段错误?

  • 这只是PHP处理"内存不足"错误的方式吗?当然必须有更优雅的方式来处理这个问题?
  • 这是Zend引擎中的错误吗?
  • 有没有什么方法可以在PHP脚本中更好地控制或处理它?
  • 是否有任何设置通常控制可以在函数中进行的最大递归调用次数?

php segmentation-fault

31
推荐指数
1
解决办法
6563
查看次数

为什么在某些机器上堆栈溢出,而在另一台机器上分段错

出于好奇,我正在尝试生成堆栈溢出.此代码根据OP生成堆栈溢出,但是当我在我的机器上运行它时,它会生成分段错误:

#include <iostream>

using namespace std;

int num = 11;
unsigned long long int number = 22;

int  Divisor()
{
    int result;
    result = number%num;

    if (result == 0 && num < 21)
    {
        num+1;
        Divisor();

        if (num == 20 && result == 0)
        {
            return number;
        }
    }

    else if (result != 0)
    {
        number++;
        Divisor();
    }
}

int main ()
{
    Divisor();
    cout << endl << endl;
    system ("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此外,根据这篇文章,一些例子也应该做同样的事情.为什么我会得到分段错误呢?

c++ stack-overflow segmentation-fault

31
推荐指数
6
解决办法
3047
查看次数