标签: stack

是否可以通过使用递归函数使堆栈溢出?

这个功能有一些问题吗?

 unsigned long factorial(unsigned long m)
 {
     return (m == 0) ? 1 : m * factorial(m - 1);
 }
Run Code Online (Sandbox Code Playgroud)

如果我添加另一个功能:

  int myCombina(int q, int p)
  {
      return factorial(q) / ( factorial(q) * factorial(q-p) );
  }
Run Code Online (Sandbox Code Playgroud)

这个myCombina()效率不高,因为应该取消最大公约数以找到组合.

max(factorial(q),factorial(qp))可以被取消.我们只需要计算qx(q-1)... x(q -k +1).

还有其他问题吗?

欢迎任何评论.

谢谢

c c++ stack-overflow recursion stack

0
推荐指数
1
解决办法
231
查看次数

使用valgrind在C中的堆栈方向的相反结果

我使用valgrind来找出堆栈方向的混乱问题.

看下面的代码,我想知道为什么运算符"p1 + = 0x80;*p1 = 1"有效且运算符"p2 - = 0x80;*p2 = 1"根据valgrind无效写入?

我认为所有的变量都根据操作系统在堆栈中分配,并且它正在增长到较低的地址,所以我认为" - ="是有效的,而"+ ="是无效的,因为它可能比较大到堆栈顶部可能不在堆栈限制中.

#include <stdlib.h>

int main()
{
    int a;
    int *p1 = &a;
    p1 += 0x80;
    int *p2 = &a;
    *p1 = 1;
    p2 -= 0x80;
    *p2 = 1;
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

c stack-overflow stack

0
推荐指数
1
解决办法
68
查看次数

LIFO究竟意味着什么?

如本教程中所述:http: //www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/

在计算机编程中,堆栈是容纳其他变量的容器(很像数组).但是,虽然数组允许您以任何顺序访问和修改元素,但堆栈更受限制.可以在堆栈上执行的操作与上面的操作相同:

1)查看堆栈中的顶部项目(通常通过名为top()的函数完成)2)从堆栈中取出顶部项目(通过名为pop()的函数完成)3)在顶部放置一个新项目堆栈(通过名为push()的函数完成)

但是如果我在C++中定义了两个变量,我就不必按照相同的定义顺序使用它们:

例:

int main() {
 int a;
 int b;

 b = 5;
 a = 6;
}
Run Code Online (Sandbox Code Playgroud)

这段代码有问题吗?我可以按照我喜欢的任何顺序使用它们!我不必先使用a,然后使用b.

我误会了什么吗?它是什么?

c++ stack computer-science

0
推荐指数
1
解决办法
1801
查看次数

什么是堆栈数据结构?

我一直在阅读和阅读堆栈,但我仍然不知道如何在现实世界的编程中使用它!我知道这是一个LIFO数据结构,但我怎样才能从中受益?我知道POP和PUSH功能,但那又怎样?

stack data-structures

0
推荐指数
1
解决办法
301
查看次数

可能是在C++中被视为"正在堆栈"的堆上创建的对象?

有代码:

struct FooBar
{
  FooBar()
  {
    MyObject obj;

    /// when c-tor is ended, obj must be deleted through d-tor call
  }
};
...
FooBar* fooBar(new FooBar);
Run Code Online (Sandbox Code Playgroud)

fooBar在堆上分配.但是对象MyObject obj里面FooBar的构造函数不知道它的创建位置.那么可以在被处理MyObject的上下文中实例化FooBar它就像在堆栈中创建的那样?

堆上分配的对象是否有自己的堆栈?这种堆栈的大小是多少?

c++ heap stack memory-management

0
推荐指数
1
解决办法
100
查看次数

程序在数组索引分配时崩溃

我在这里遇到一些问题.每次我运行下面的代码,我的程序都会崩溃.

void Wingcod::push(byte b)
{
    stack[stackp] = b;
    stackp++;
    if(stackp >= stacks)
    {
        stacks += 16;
        try
        {
            realloc(stack,stacks);
        }catch(bad_alloc*)
        {
            cerr << "STACK OVERFLOW";
            exit(1);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈,堆栈和堆栈的定义如下:

stacks = 8;
stackp = 0;
stack = new byte[stacks];
Run Code Online (Sandbox Code Playgroud)

而字节只是一个unsigned char.

c++ arrays indexing stack pointers

0
推荐指数
1
解决办法
208
查看次数

在Objective-C中使用指针?

每当Apple创建自己的自定义类时,它通常会创建一个指向对象的指针,而不是实际的对象本身.

例如,而不是做:

Class object
Run Code Online (Sandbox Code Playgroud)

他们经常这样做:

Class *object = [[Class alloc] init];
Run Code Online (Sandbox Code Playgroud)

为什么指针如此常用而不是将对象放在堆栈上?是否有一些技术原因,因为我没有看到这样做的任何直接好处.

编辑:如果Objective-C不支持堆栈上的对象,他们怎么能创建任何非指针?我的意思是我见过人们直接使用NSInteger.

memory heap stack objective-c

0
推荐指数
1
解决办法
109
查看次数

为什么要实现堆栈和队列java

当使用列表获得相同的功能时,为什么要实现堆栈或队列?

java stack

0
推荐指数
1
解决办法
340
查看次数

为什么这个代码在多线程上运行***,即使在多核机器上也是如此?

如果这个代码在多个内核上运行多个线程没有任何性能优势,我就不会感到头疼.但它怎么能真正运行得

首先看一下代码:

class ThreadSafeStack
  def initialize
    @s,@m = [],Mutex.new
  end
  def push(value)
    @m.synchronize { @s.push(value) }
  end
  def pop
    @m.synchronize { @s.pop }
  end
  def peek
    @m.synchronize { @s.last }
  end
end
Run Code Online (Sandbox Code Playgroud)

完整的基准测试脚本位于https://github.com/alexdowad/showcase/blob/master/ruby-threads/concurrent_stack.rb.基本上,我做了一百万次推送,一百万次偷窥和一百万次流行音乐,分为1个,5个或25个线程(并行运行).

运行JRuby 1.6.5.1的4核Mac Pro的结果:

Testing ThreadSafeStack with 1 thread, iterating 1000000x each
  1.575000   0.000000   1.575000 (  1.575000)
Testing ThreadSafeStack with 5 threads, iterating 200000x each
  4.838000   0.000000   4.838000 (  4.838000)
Testing ThreadSafeStack with 25 threads, iterating 40000x each
 11.409000   0.000000  11.409000 ( 11.409000)
Run Code Online (Sandbox Code Playgroud)

是什么赋予了??? …

ruby performance stack multithreading multicore

0
推荐指数
2
解决办法
1518
查看次数

堆栈溢出可视化C++,可能是数组大小?

据我所知,这不是由无限递归引起的.

该程序使用较小的数组(它是一个音频编辑器)正常运行.现在我增加了功能以允许更大的阵列(最多5分钟的音频,26460000个16位数据~50mb).

由于增加了数组的大小,我在一个特定的函数上收到堆栈溢出错误,它应该通过向后将数组写入新数组来反转输入文件的回放,然后覆盖原始数组.我猜测每个阵列可能高达50MB,这可能是问题所在:

//initialise temporary new array to place samples in
short signed int reverse_data[max_number_samples];  

for (i=0; i<track_samples; i++)
{  //puts data from sound_data into reverse_data backwards.
  reverse_data[(max_number_samples-1)-i]=sound_data[i];    
}

for (i=0; i<track_samples; i++)    
{     //now overwrites sound_data with the data in reverse_data
  sound_data[i]=reverse_data[i];
}
Run Code Online (Sandbox Code Playgroud)

我对C++和编程很新,并且不确定我在调试期间得到的错误是什么告诉我的.

任何帮助将不胜感激,我确信有一个简单的解决方案(我读过涉及'堆'的东西,但我不确定'堆'真的是什么).

c++ arrays stack overflow

0
推荐指数
1
解决办法
583
查看次数