首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++递归程序中的堆栈溢出问题

C++递归程序中的堆栈溢出问题
EN

Stack Overflow用户
提问于 2010-03-28 14:59:24
回答 1查看 331关注 0票数 1

我正在运行的一个递归函数中有一个堆栈溢出。

这是代码..

代码语言:javascript
复制
void* buddyMalloc(int req_size)
{ 
     // Do something here
     return buddy_findout(original_index,req_size); // This is the recursive call
}

void *buddy_findout(int current_index,int req_size)
{
    char *selected = NULL;

    if(front!=NULL)
    {
        if(current_index==original_index)
        {
            // Do something here
            return selected;
        }
        else
        {
            // Do Something here
            return buddy_findout(current_index+1,req_size);
        }
    }
    else
    {
        return buddy_findout(current_index-1,req_size);
    }
}

考虑index的初始值为4。它首先做index-1,直到它达到0 index。然后通过incrementing..This返回到索引4,这就是我想要实现的。但它会在命令提示符下使用内存映射造成堆栈溢出:

下面是我的shell的输出:

代码语言:javascript
复制
*** glibc detected *** ./473_mem: free(): invalid pointer: 0x00c274c0 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb50ff1]
/lib/tls/i686/cmov/libc.so.6[0xb526f2]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb557cd]
./473_mem[0x8048b44]
./473_mem[0x8048b74]
./473_mem[0x8048b74]
./473_mem[0x8048944]
./473_mem[0x8048c87]
./473_mem[0x8048d31]
./473_mem[0x8048f79]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xafcb56]
./473_mem[0x8048671]
======= Memory map: ========
0017c000-00198000 r-xp 00000000 08:01 5224       /lib/libgcc_s.so.1
00198000-00199000 r--p 0001b000 08:01 5224       /lib/libgcc_s.so.1
00199000-0019a000 rw-p 0001c000 08:01 5224       /lib/libgcc_s.so.1
00260000-00284000 r-xp 00000000 08:01 1927       /lib/tls/i686/cmov/libm-2.10.1.so
00284000-00285000 r--p 00023000 08:01 1927       /lib/tls/i686/cmov/libm-2.10.1.so
00285000-00286000 rw-p 00024000 08:01 1927       /lib/tls/i686/cmov/libm-2.10.1.so
006cd000-006e8000 r-xp 00000000 08:01 6662       /lib/ld-2.10.1.so
006e8000-006e9000 r--p 0001a000 08:01 6662       /lib/ld-2.10.1.so
006e9000-006ea000 rw-p 0001b000 08:01 6662       /lib/ld-2.10.1.so
00aa9000-00aaa000 r-xp 00000000 00:00 0          [vdso]
00ae6000-00c24000 r-xp 00000000 08:01 1900       /lib/tls/i686/cmov/libc-2.10.1.so
00c24000-00c25000 ---p 0013e000 08:01 1900       /lib/tls/i686/cmov/libc-2.10.1.so
00c25000-00c27000 r--p 0013e000 08:01 1900       /lib/tls/i686/cmov/libc-2.10.1.so
00c27000-00c28000 rw-p 00140000 08:01 1900       /lib/tls/i686/cmov/libc-2.10.1.so
00c28000-00c2b000 rw-p 00000000 00:00 0 
08048000-0804a000 r-xp 00000000 00:14 2176       /media/windows-share/OS/Project2/473_mem
0804a000-0804b000 r--p 00001000 00:14 2176       /media/windows-share/OS/Project2/473_mem
0804b000-0804c000 rw-p 00002000 00:14 2176       /media/windows-share/OS/Project2/473_mem
08483000-084a4000 rw-p 00000000 00:00 0          [heap]
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b7716000-b7819000 rw-p 00000000 00:00 0 
b7827000-b782a000 rw-p 00000000 00:00 0 
bfb96000-bfbab000 rw-p 00000000 00:00 0          [stack]
Aborted

提前谢谢你,阿迪

EN

回答 1

Stack Overflow用户

发布于 2010-03-28 15:34:51

front设置在哪里?

在呼叫中:

代码语言:javascript
复制
else 
    { 
        return buddy_findout(current_index-1,req_size); 
    } 
} 

front为NULL时,您只需返回到具有较小current_index的相同函数,并不断循环。current_index == 0没有停止条件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2532148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档