Tag: 堆栈溢出

如何在C程序中删除此分段错误

这里我想解决此代码中的堆栈溢出问题。 在这个代码中,我递归调用函数p 350000次,所以当我删除350000时,我得到分段错误并且放置300000比它工作正常这里分段错误来自因为我更多次调用函数p的递归调用或者调用递归函数太深。 这不起作用,因为我采取if(i != 350000) 。 它的停留时间可能在300000到327480之间。我测试了10次 码: #include void p(char *, int); int main() { char *a = “HI”; int b = 10; p(a, b); printf(“\nComplete”); return 0; } void p(char *a, int b) { static long int i = 0; if (i != 350000) { printf(“\n%ld \t at Hi hello”, i); i++; […]

如何知道ac程序的堆栈溢出?

我在c中模拟了一个问题(3d Ising模型),但是当问题大小变大时,程序停止并出现以下错误: Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) 在程序中我有一个递归函数,完成所有工作,我怀疑错误是由于堆栈溢出(在递归函数中)但我不知道如何确定。 如果是因为堆栈溢出,有没有办法解决这个问题而不改变程序设计? 我正在使用Clion IDE。 /* * recursive function to form Wolff Cluster(= WC) */ void grow_Wolff_cluster(lattic* l, Wolff* wolff, site *seed){ /*a neighbor of site seed*/ site* neighbor; /*go through all neighbors of seed*/ for (int i = 0 ; i neighbors[i]; […]

printf命令导致seg错误?

当我尝试初始化一个大的双维字符数组时,它工作得非常好。 但是当我添加一个简单的打印命令时,它会给我一个分段错误。 有关为什么会发生这种情况的任何想法? #include int main(void) { printf(“!”); char f[10000][10000]; } 没有printf命令,或者即使printf命令没有打印任何内容(即“”),它也能正常工作。 如果我让它打印任何东西它会给出错误。 有帮助吗?

无法在C中声明大小为400000的数组

我想做以下事情: #include #include #define N 400000 void main() { int a[N]; } 我得到一个stackoverflowexception。 我的电脑有6GB的主内存,所以我无法全部使用它。 我该如何解决这个问题? 我在Windows 7上使用VS 2008并在C中编码。

C函数中未声明的标识符

当我编译以下C函数/程序时,我得到的错误如”missing ‘;’ before ‘type’ ‘remainder’ : undeclared identifier” “missing ‘;’ before ‘type’ ‘remainder’ : undeclared identifier” – 这个函数有什么问题? #include void conversionTo(int number,int base) { if(number==0) return; int remainder=number%base; conversionTo((number/base),base); if(remainder<10) printf("%c",'0'+remainder); else printf("%c",'a'-10+remainder); } int main() { conversionTo(int number,int base); return 0; }

使用Cimg库读取jpeg图像时出现堆栈溢出错误

当我尝试使用Cimg库读取jpg文件而其他格式bmp正在工作文件时,我收到堆栈溢出错误。 我该如何解决? #include”CImg.h” #include using namespace cimg_library; int main() { CImg src(“d:\\sidimg.jpg”); int width = src.width(); int height = src.height(); unsigned char* ptr = src.data(0,0); int count=0; while(count!= width*height) { printf(“%d”,*ptr); ptr++; count++; } }

为什么我没有堆栈溢出?

编辑在你兴奋之前看到最后的重要编辑,如果你仍然好奇,这些报告为: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696222 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696263 我一直在尝试一段代码,并惊讶地发现我没有得到堆栈溢出。 试图简化我甚至得到的东西: #include int main() { int i; /* 1,500,000,000 x 4 bytes = 6,000,000,000 bytes = 6GB */ int size = 1500000000; int arr[size]; for (i = 0; i < size; i++) { arr[i] = 1; } printf("first: %d\n", arr[0]); printf("last: %d\n", arr[size – 1]); return 0; } 这使我怀疑我甚至不知道内存管理的基础知识。 我认为arr[size]应该在堆栈上轻松分配并且很容易溢出,而是它使用我所有的内存并交换并成功完成。 我错过了什么? […]

libsigsegv并响应堆栈溢出

我们正在尝试测试学生代码,并且为了自动化该过程,我们想要检测学生的代码是否溢出堆栈。 我使用libsigsegv库及其相应的stackoverflow_install_handler获得了一些成功。 它的工作非常出色,直到学生的代码两次打击堆栈。 例如,这里是一些示例输出: [# ~]$ ledit ./interpreter -> (use solution) -> (fun 1 2) *** Stack overflow detected *** -> (fun 1 2) Signal -10 [# ~] 初始“ *检测到堆栈溢出* ”是理想的输出。 在第二次吹掉堆栈之后,我得到的只是一个无用的“Signal -10”,程序停止执行。 我想再次看到堆栈溢出检测到的消息,让代码继续执行。 在我的堆栈溢出处理程序中,我只是将溢出检测消息打印到stderr并且长时间跳回到解释器中的“等待输入状态”。 谢谢你的帮助! 编辑 根据下面的caf的建议,我们添加了对sigsegv_leave_handler()的调用,如下所示: static void continuation(void *arg1, void *arg2, void *arg3) { (void)(arg1); (void)(arg2); (void)(arg3); siglongjmp(errorjmp, 1); } static void […]

粉碎堆栈example3.c混乱

文章可以在这里找到。 我正在阅读粉碎堆栈并发现自己被卡在example3.c上。 0x80004a3 : call 0x8000470 0x80004a8 : addl $0xc,%esp 0x80004ab : movl $0x1,0xfffffffc(%ebp) 0x80004b2 : movl 0xfffffffc(%ebp),%eax 作者指出我们想要从0x80004a8跳到0x80004b2并且这个跳转是8个字节; 作者如何确定这是8个字节? 我重新创建了代码并通过objdump发送它,发现它不是8个字节(我在64位机器上,但我确保使用32位编译): 8048452: e8 b5 ff ff ff call 804840c 8048457: c7 44 24 1c 01 00 00 movl $0x1,0x1c(%esp) 804845e: 00 804845f: 8b 44 24 1c mov 0x1c(%esp),%eax 8048463: 89 44 24 04 mov %eax,0x4(%esp) […]

什么导致堆栈溢出?

您可能认为这是一个巧合,我的问题的主题类似于论坛的名称,但我实际上是通过谷歌搜索术语“堆栈溢出”。 我使用OPNET网络模拟器,我使用C进行编程。我认为我遇到了大数组大小的问题。 看来我正在达到某种内存分配限制。 它可能与OPNET,Windows,我的笔记本电脑内存或最有可能的C语言有关。 当我尝试使用具有数千个整数的元素总数的嵌套数组时,会导致该问题。 我认为我超出了整体内存分配限制,我想知道是否有办法增加这个上限。 这是确切的问题描述: 我基本上有一个路由表。 我们称之为routing_tbl [n],这意味着我支持30个节点(路由器)。 现在,对于此表中的每个节点,我保留信息。 大约有许多(数百个)可用路径,在一个名为paths [p]的数组中。 同样,对于此数组中的每个路径,我将属于它的节点列表保存在名为hops [h]的数组中。 所以,我至少使用了nph整数值的内存,但是这个表也包含其他信息。 在同一个函数中,我也使用另一个嵌套数组,它也消耗了近40,000个整数。 一旦我运行我的模拟,它就会退出抱怨堆栈溢出。 当我减少路由表的总大小时,它可以工作。 您认为导致问题的原因是什么?如何解决? 非常感谢阿里