标签: segmentation-fault

仅在不使用调试器时才会出现段错误

我有一个多线程C程序,它在程序的特定点始终生成分段错误.当我用gdb运行它时,没有显示错误.你能想到只有在不使用调试器时才会出现故障的原因吗?不能用它来发现问题真烦人!

c debugging gdb segmentation-fault

51
推荐指数
3
解决办法
2万
查看次数

glGenVertexArrays(1,&vao)的分段错误;

我的gdb回溯给出:

(gdb) backtrace
#0  0x00000000 in ?? ()
#1  0x0804a211 in init () at example1.cpp:147
#2  0x0804a6bc in main (argc=1, argv=0xbffff3d4) at example1.cpp:283
Run Code Online (Sandbox Code Playgroud)

信息量不大.Eclipse调试器至少让我看到它停在下面的第3行:

// Create a vertex array object
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的块,可以在gl编程中看到,我甚至可以使用相同的块运行其他代码,没有任何问题.所以我很困惑.

从运行make构建输出:

g++ -g -DFREEGLUT_STATIC -DGLEW_STATIC -I../../include example1.cpp ../../Commo/InitShader.o  -L/usr/lib/mesa -lGLEW -lglut -lGL -lX11  -lm  -o example1
Run Code Online (Sandbox Code Playgroud)

包含问题的程序:

// rotating cube with two texture objects
// change textures with 1 and 2 keys

#include "Angel.h"

const int  NumTriangles = 12; // …
Run Code Online (Sandbox Code Playgroud)

c++ opengl debugging segmentation-fault

50
推荐指数
1
解决办法
2万
查看次数

分段错误:11

我遇到了一些程序的问题,我搜索了有关分段错误的内容,我不太了解它们,我唯一知道的是,大概是我试图访问一些我不应该访问的内存.问题是我看到了我的代码并且不明白我做错了什么.

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

#define   lambda   2.0
#define   g        1.0
#define   Lx       100
#define   F0       1.0
#define   Tf       10
#define   h       0.1
#define   e       0.00001

FILE   *file;

double F[1000][1000000];

void Inicio(double D[1000][1000000]) {
int i;
for (i=399; i<600; i++) {
    D[i][0]=F0;
}
}

void Iteration (double A[1000][1000000]) {
long int i,k;
for (i=1; i<1000000; i++) {
    A[0][i]= A[0][i-1] + e/(h*h*h*h)*g*g*(A[2][i-1] - 4.0*A[1][i-1] + 6.0*A[0][i-1]-4.0*A[998][i-1] + A[997][i-1]) + 2.0*g*e/(h*h)*(A[1][i-1] - 2*A[0][i-1] + A[998][i-1]) + e*A[0][i-1]*(lambda-A[0][i-1]*A[0][i-1]);
    A[1][i]= A[1][i-1] + e/(h*h*h*h)*g*g*(A[3][i-1] - 4.0*A[2][i-1] …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault

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

将 shared_ptr 用于 private_key 时出现分段错误

更新

[X] 我发现TLS::credentials creds在全局范围内声明时会发生这种情况,但是如果我在外部声明它不会发生段错误。

我需要它是全局的,因为它有助于缓存证书,并且多个线程可以使用其他线程创建的证书,而无需花时间创建新证书。

[X] 我进一步减少了大约 200 行的代码。到 100 行

我正在使用 Botan 创建一个 TLS 应用程序,我的应用程序在应用程序结束时因段错误而崩溃。

我试图用 Valgrind 调试它,但它无济于事。

这是来自 Valgrind 的堆栈跟踪,

==3841967== Invalid write of size 8
==3841967==    at 0x4842964: memset (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==3841967==    by 0x566A82F: Botan::deallocate_memory(void*, unsigned long, unsigned long) (in /usr/lib/x86_64-linux-gnu/libbotan-2.so.12.12.1)
==3841967==    by 0x55E1A4D: ??? (in /usr/lib/x86_64-linux-gnu/libbotan-2.so.12.12.1)
==3841967==    by 0x40EC7B: std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() (shared_ptr_base.h:155)
==3841967==    by 0x40EC29: std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() (shared_ptr_base.h:730)
==3841967==    by 0x41112D: std::__shared_ptr<Botan::RSA_Public_Data const, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() (shared_ptr_base.h:1169)
==3841967==    by 0x411107: std::shared_ptr<Botan::RSA_Public_Data const>::~shared_ptr() (shared_ptr.h:103)
==3841967==    by 0x41109D: Botan::RSA_PublicKey::~RSA_PublicKey() (rsa.h:25) …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr segmentation-fault botan c++11

49
推荐指数
2
解决办法
2618
查看次数

分段错误的行号

我可以设置任何gcc选项,它会给我分段错误的行号吗?

我知道我可以:

  1. 逐行调试
  2. 将printfs放入代码中以缩小范围.

编辑:

  1. bt/ where在gdb上给出无堆栈.
  2. 有用的建议

debugging gcc gdb segmentation-fault

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

如何调试Python分段错误?

如何调试Python分段错误?

我们试图在SuSE 12.3上运行我们的python代码.我们得到可重现的分段错误.多年来,python代码一直在其他平台上工作而没有分段错误.

我们只编写Python代码,没有C扩展....

调试这个的最佳方法是什么?我知道有点ansi c,但那是十年前......

Python 2.7.5

更新

解析器关闭时会发生分段错误.

我可以多次运行脚本:

python -m pdb myscript.py arg1 arg1
continue
run
continue
run
Run Code Online (Sandbox Code Playgroud)

但是如果我使用ctrl-d离开pdb,则会发生分段错误.

更新2

我现在尝试用gdb调试它:

gdb 
> file python
> run myscript.py arg1 arg2
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefbe2700 (LWP 15483)]
0x00007ffff7aef93c in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
(gdb) bt
#0  0x00007ffff7aef93c in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
#1  0x00007ffff7af5303 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.7.so.1.0
#2  0x00007ffff7adc858 in ?? () from /usr/lib64/libpython2.7.so.1.0
#3  0x00007ffff7ad840d in PyObject_Call () from …
Run Code Online (Sandbox Code Playgroud)

python segmentation-fault

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

将数据复制/扫描/读取到未初始化指针时发生崩溃或"分段错误"

这个问题可以作为所有常见问题的参考:

当我将数据复制/扫描到未初始化指针所指向的地址时,为什么会出现神秘崩溃或"分段错误"?

例如:

char* ptr;
strcpy(ptr, "hello world"); // crash here!
Run Code Online (Sandbox Code Playgroud)

要么

char* ptr;
scanf("%s", ptr); // crash here!
Run Code Online (Sandbox Code Playgroud)

c pointers segmentation-fault

42
推荐指数
1
解决办法
7046
查看次数

什么会导致C++中的分段错误?

我注意到C++中的分段错误的常见原因列表没有问题,所以我想我会添加它.

自然它是社区维基,因为没有一个正确的答案.

我认为这对于学习C++的新程序员可能有用,如果你不同意,可以随意关闭它.

c++ segmentation-fault

41
推荐指数
3
解决办法
4万
查看次数

总线错误与分段故障

总线错误和分段错误之间的区别?是否会发生程序发出seg故障并第一次停止并且第二次发生总线错误并退出?

c segmentation-fault bus-error sigbus

37
推荐指数
4
解决办法
3万
查看次数

堆栈溢出是否会导致除分段错误之外的其他内容?

在一个已编译的程序中(假设是C或C++,但我想这个问题可以扩展到任何带有调用堆栈的非VM语言) - 通常当你溢出堆栈时,会出现分段错误:

堆栈溢出是[a]原因,分段错误就是结果.

但这总是如此吗?堆栈溢出是否会导致其他类型的程序/操作系统行为?

我也问过非Linux,非Windows操作系统和非X86硬件.(当然,如果你没有硬件内存保护或操作系统支持(例如MS-DOS)那么就没有分段错误;我问的是你可能会遇到分段错误的情况但是还会发生其他事情).

注意:假设以外的堆栈溢出,该方案是有效的,而不是试图访问数组超出边界,取消引用无效指针等

c c++ stack-overflow segmentation-fault

36
推荐指数
3
解决办法
2281
查看次数