我正在为Windows和Unix编写一个跨平台的C ++程序。 在窗口一侧,代码将编译并执行没有问题。 在Unix方面,它会编译,但是当我尝试运行它时,我得到了一个分段错误。 我最初的直觉是指针有问题。 什么是好的方法来find和修复分段错误?
我正在Python中实现Kosaraju的强连通组件(SCC)图searchalgorithm。 该程序在小数据集上运行良好,但是当我在超大图(超过80万个节点)上运行它时,它会显示“Segmentation Fault”(分段错误)。 可能是什么原因呢? 谢谢! 附加信息:首先,我在超大型数据集上运行时遇到此错误: "RuntimeError: maximum recursion depth exceeded in cmp" 然后我使用重置recursion限制 sys.setrecursionlimit(50000) 但得到了“分段错误” 相信我这不是一个无限循环,它在相对较小的数据上运行正确。 程序可能耗尽了资源吗?
我认为这个问题说明了一切。 涵盖从C89到C11的大多数标准的例子将是有帮助的。 我虽然这一个,但我想这只是未定义的行为: #include <stdio.h> int main( int argc, char* argv[] ) { const char *s = NULL; printf( "%c\n", s[0] ); return 0; } 编辑: 正如一些投票要求澄清:我想有一个程序通常编程错误(最简单的我能想到的是段错误),这是保证 (通过标准)中止。 这与最小的段落问题有些不同,它不关心这个保险。
这可能是一个非常简单的问题,我正试图debugging一个应用程序,在kern.log生成以下segfault错误 kernel: myapp[15514]: segfault at 794ef0 ip 080513b sp 794ef0 error 6 in myapp[8048000+24000] 这是我的问题: 是否有任何关于segfault的diff错误数字的文档,在这个例子中是错误6,但我已经看到错误4,5 at bf794ef0 ip 0805130b sp bf794ef0 and myapp[8048000+24000]的信息是什么意思? 到目前为止,我能够用符号进行编译,而当我做一个x 0x8048000+24000它会返回一个符号,这是否是正确的方法呢? 我的假设到目前为止如下: sp =堆栈指针? ip =指令指针 at = ???? myapp [8048000 + 24000] =符号地址?
我试图编译和运行下面的程序没有main()函数在C 。 我已经使用以下命令编译了我的程序。 gcc -nostartfiles nomain.c 编译器给出警告 /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340 好吧,没问题。 然后,我运行可执行文件(a.out), printf语句都成功打印,然后出现分段错误 。 所以,我的问题是, 成功执行打印语句后为什么分段错误? 我的代码: #include <stdio.h> void nomain() { printf("Hello World…\n"); printf("Successfully run without main…\n"); } 输出: Hello World… Successfully run without main… Segmentation fault (core dumped) 注意: 在这里, -nostartfiles gcc标志防止编译器在链接时使用标准启动文件
我们如何确定导致分段错误的代码中的错误? 在编写一些代码之后,为了确定哪里出现了分段错误,gcc可以告诉我在特定的行号中有一个错误(或input错误) – 因为该行导致了分段错误?
我收到错误… 命令由于信号失败:分段故障:11 …当试图编译我的Swift应用程序。 我正在使用Xcode 6.1,试图在iOS 8.1上构buildiPhone 5。 我的代码 import UIKit class ViewController: UIViewController { @IBOutlet weak var username: UITextField! @IBAction func signIn(sender: AnyObject) { PFUser.logInWithUsernameInBackground(username.text, password:"mypass") { (user: PFUser!, error: NSError!) -> Void in if user != nil { println("Logged In") } else { func myMethod() { var user = PFUser() user.username = username.text user.password […]
“总线错误”信息是什么意思,它与段错误有什么不同?
我正在研究execve shellcode, 操作系统:Linux bt 2.6.39.4 root @ bt:〜/ exploit#cat gshell.s .globl _start _start: nop jmp MyString shell: popl %esi xorl %eax,%eax movl %al,9(%esi) movl %esi,10(%esi) movl %eax,14(%esi) movb $11,%al movl %esi, %ebx leal 0xa(%esi),%ecx leal 0xe(%esi),%edx int $0x80 movl $1,%eax movl $0,%ebx int $0x80 MyString: call shell shellvar: .ascii "/bin/bashADDDDCCCC" root @ bt:〜/ exploit#as -gstabs […]
我在这里看到了许多关于在C程序中获得分段错误的问题,我认为在这里有一个引用这些是很好的问题,在某些情况下会导致分段错误。 我的答案是张贴在下面。 正如在一些答案中所写的那样,所有情况下的行为都是不确定的,尽pipe很多人将它们视为分段错误 ,所以这个问题是关于什么导致这个“症状”的。 在下面的情况下,我运行程序时出现分段错误,您能确定原因吗? 1) char *str = "foo"; str[0] = 'b'; // << Segfault hre 2) char str[] = "foo"; char *newStr = malloc(strlen(str)); strcpy(newStr, str); free(newStr); // << Segfault here 3) char *str = malloc(4 * sizeof(char)); str = "foo"; free(str); // << Segfault here 4) char *str = malloc(4 * sizeof(char)); […]