首页 文章
  • 2 votes
     answers
     views

    通过在堆上分配堆栈部分来避免堆栈溢出?

    是否有一种语言可以在超出原始堆栈空间时启用在堆上分配新堆栈空间的机制? 我记得在我的大学做了一个实验室,我们在C中使用内联汇编来实现基于堆的可扩展堆栈,所以我知道它原则上应该是可行的 . 我知道在开发应用程序时获取堆栈溢出错误可能很有用,因为它会在不使系统占用大量内存并开始交换的情况下快速终止疯狂的无限递归 . 但是,当你有一个经过良好测试的完成的应用程序要部署并希望它尽可能健壮时(比如它是一个在...
  • 12 votes
     answers
     views

    溢出主堆栈时有四种不同的结果

    出于好奇,我正在玩这个代码溢出堆栈: fn main() { let my_array: [i32; 3000000000] = [3; 3000000000]; println!("{}", my_array[0]); } 令我惊讶的是,我结束了三个不同的结果: 1)这是我的预期: thread '<main>' has overflowed i...
  • 1 votes
     answers
     views

    c仅分配函数调用返回的struct的一部分

    我有以下结构: struct foo{ int a[4]; int b[4]; } 我有以下功能: foo get_foo() { foo ret_val; <..some assignments here..> return ret_val; } 现在,我的主要代码: void* process_a() { int* pa = ge...
  • 1 votes
     answers
     views

    这些堆栈分配还是堆分配? [重复]

    可能重复:这种类型的内存是在堆还是堆栈上分配的? class foo{ private: int bar; constructors and other members here... } 如果我使用new运算符创建一个 foo 的实例,它将被创建? 我猜,但我的 int bar; 在哪里创建,堆栈或堆? 如果我的 bar 不是原始数据类型而是另一个像 this->bar=bar();...
  • 3 votes
     answers
     views

    预期的缓冲区溢出并不总是导致程序崩溃

    考虑以下最小C程序: Case Number 1 : #include <stdio.h> #include <string.h> void foo(char* s) { char buffer[10]; strcpy(buffer,s); } int main(void) { foo("01234567890134567")...
  • 0 votes
     answers
     views

    python递归迭代超过树实现的限制

    我正在python中动态实现一棵树 . 我已经定义了一个类如下 class nodeobject(): def __init__(self,presentnode=None,parent=None): self.currentNode = presentnode self.parentNode = parent self.childs = ...
  • 2 votes
     answers
     views

    TensorFlow:在while循环中堆叠张量

    我正在尝试实现一个遍历张量行的循环,检索每一行中的索引,使用它们从另一个张量中收集向量,最后将这些向量组合在一个新的张量中 . 问题是每行可能包含不同数量的索引(例如[[-1,-1,1,4,-1],[3,-1,-1,-1,-1]]第一行索引:[1,4];第二行索引[3]) . 当我使用tf.while_loop或tf.scan时,问题就出现了 . 对于第一个,我不明白如何将所有聚集的张量叠加在一起...
  • 4 votes
     answers
     views

    堆栈和堆在c锐利[重复]

    可能重复:当类存储在堆(.NET)上时,为什么结构存储在堆栈中? 任何人都可以告诉我如何分配内存以确定哪个对象存储在堆栈中以及哪些对象存储在内存的堆部分中?
  • 38 votes
     answers
     views

    堆栈和堆内存的大小[重复]

    可能重复:堆栈和堆的内容和位置是什么? 关于c程序中内存布局的基本概念,我理解: 该语言使用两个主要数据结构 stack 和 heap . 创建堆栈以存储子程序的局部变量和簿记数据 创建堆以存储程序的动态分配变量 堆本质上是可变长度的 . (在堆栈上不太确定) 通常,编译器/语言的责任是在执行之前请求OS创建这些数据结构 . 问题 创建堆栈/堆的初始大小是多少?谁...
  • 2 votes
     answers
     views

    Java堆和堆栈

    我想再次学习Java,因为我几年前就离开了 . 读一本书我在理解Java如何在堆中和堆栈中分配内存时遇到了问题 . 这就是我所理解的 - 我会尝试用例子来谈论它 . class TestA { int a; void methodA(int b) { a = b; } int getA() { return a; } } ...
  • 0 votes
     answers
     views

    堆栈和堆和垃圾收集器

    Headers 可能有点不正确,但它的Stack&Heap和Garbage Collector也是如此 . 我的代码: static void Main(string[] args) { MyInt x = new MyInt(); x.MyValue = 3; MyInt y = new MyInt(); y = x; ...
  • 1 votes
     answers
     views

    c在编译时分配的内存

    我读到,在运行时期间在堆上分配动态内存时,在编译期间在堆栈上分配静态内存,因为编译器知道在编译时需要分配多少内存 . 请考虑以下代码: int n; cin>>n; int a[n]; 如果在运行期间只读取实际大小,编译器如何知道在编译时为[]分配多少内存?
  • 1 votes
     answers
     views

    对C的动态内存分配的确切含义有点困惑

    我听说过有关动态的确切含义的冲突事件,以及自动内存分配 . 我听说堆栈被称为自动内存分配和动态内存分配 . 我可以看到两者都是在程序执行之前确定堆栈内存块大小,因此它的最大大小在运行时不会增长 . 但是,在程序执行期间,当函数数据被推入和弹出堆栈时,堆栈会不断增长和缩小 . 那么在这个意义上是不是这种动态内存分配? 如果它是不是混淆只是将堆称为动态? 有人可以帮我澄清一下吗? 编辑:在撰写本文时,...
  • 1 votes
     answers
     views

    弹出我用C制作的堆栈

    我正在用C语言编写一个堆栈结构和推/弹方法作为教育练习(不做作业,我只是想做点什么,虽然我希望我的作业很好)但我陷入了两难境地 . 当我从堆栈中弹出一个节点时,我应该返回堆栈上还是堆上的值? 如果我在堆上返回值,如果使用堆栈的程序没有free()内存那么就会出现内存泄漏,但是如果我使用堆栈则可能存在范围问题和用户(可能只是我我的堆栈实现将不得不处理额外的工作 . 到目前为止,我一直在使用堆来处理堆...
  • 0 votes
     answers
     views

    为什么堆栈弹出(而不是

    我正在编写一个代码,将中缀转换为后缀,用于hw赋值 . 我调试了它,但我似乎无法解决为什么当它弹出堆栈时它会返回'('而不是''' StackInterface<Character> stack = new ArrayStack<Character>(); String postfix = ""; int length = inf...
  • 1 votes
     answers
     views

    是否在C中的堆栈或堆上创建激活记录?

    我正在阅读有关内存分配和激活记录的内容 . 我有些疑惑 . 任何人都可以制作以下水晶吗? 一个) . 我的第一个疑问是 "Are activation records created on stack or heap in C" ? B) . 这些是我所指的摘要中的几行: - > 即使堆栈区域上的内存是在运行时创建的 - 内存量(激活记录大小)也是在编译时确定的 . 静...
  • -1 votes
     answers
     views

    弹出值Stack <T> [重复]

    这个问题在这里已有答案: Adding items to a LIST&lt;&gt; of objects results in duplicate Objects when using a NEW in a Loop 2个答案 因此,我正在尝试使用堆栈创建用于迷宫生成的回溯递归算法,以存储在整数[x,y]数组中输入的最后一个点的坐标 . 当我尝试将.Pop的结果存储在堆栈中时,它会为第一个...
  • 7 votes
     answers
     views

    StackOverflowError何时发生? [重复]

    这个问题在这里已有答案: What is the maximum depth of the java call stack? 4个答案 根据Oracle的说法,StackOverflowError是: 发生堆栈溢出时抛出,因为应用程序过于严重 . 我知道递归是什么,通常递归函数,如果没有正确终止,会导致StackOverflowError . 要检查在抛出 StackOverflowErr...
  • 0 votes
     answers
     views

    在STACK中输入不同的数据类型值时无限循环

    下面是STACK的代码,没有溢出,因为我使用矢量概念 . 只要我按 integers ,程序似乎工作得很好,但是只要我按 float value (进行测试),输出屏幕就会进入无限循环,调试器甚至不会停在 cin 语句,它只是在不给出控件的情况下交叉它到控制台窗口 . #include&quot;iostream&quot; class Mystack { private: int *in...
  • 2 votes
     answers
     views

    Rust中的所有权跟踪:Box <T>(堆)和T(堆栈)之间的差异

    尝试使用编程语言Rust,我发现编译器能够非常准确地跟踪 field of some struct on the stack 的移动(它确切地知道移动了哪个字段) . 但是,当我将结构的一部分放入 Box (即将其放入堆中)时,编译器不再能够确定框中发生的所有事件的字段级移动 . 它将假设整个结构&quot;inside the box&quot;已经移动 . 让我们首先看一下一切都在堆栈上的例子...
  • 621 votes
     answers
     views

    为什么Java Vector(和Stack)类被认为已过时或已弃用?

    为什么Java Vector被认为是遗留类,已过时或已弃用? 在使用并发时,它的使用是否有效? 如果我不想手动同步对象并且只想使用线程安全的集合而不需要创建底层数组的新副本(如 CopyOnWriteArrayList 那样),那么使用 Vector 是否可以? 那么 Stack ,它是 Vector 的一个子类,我应该用它来代替它?
  • 1 votes
     answers
     views

    R不使用可用的堆栈大小,返回“错误:节点堆栈溢出”

    我在R中编写了一个递归代码 . 在调用R之前,我在shell中将堆栈大小设置为96 MB: ulimit -s 96000 我调用R,最大保护指针堆栈大小为500000: R --max-ppsize 500000 我将最大递归深度更改为500000: options(expression = 500000) 我在Arch Linux存储库中使用了二进制R包(没有内存分析),也使用了内存分析...
  • 4 votes
     answers
     views

    获取Cloudformation错误:未成功创建嵌入式堆栈

    我已经制作了一个引用4个子模板的父(嵌套)堆栈模板 . 当我通过 aws cloudformation create-stack 启动堆栈时,我得到父堆栈的以下错误: Embedded stack AlignmentLambdaFunction was not successfully created: The following resource(s) failed to create: [Cl...
  • 1 votes
     answers
     views

    八皇后C利用堆栈回溯

    所以我这样做是为了做作业,我无法弄清楚我的错误在哪里 . 任何帮助都非常感谢 . 我的理解是这样的 . 初始化一个堆栈,用于跟踪哪个行和列中有一个皇后 . 在第一个方格上放置一个女王,将其位置推到堆叠上 . 推(0,0);然后设置一个已填充行的变量 . 填充 ; 然后循环 检查当前行或列是否与另一个女王发生冲突 . 一个 . 没有冲突 . 推动堆叠 . 增加填充的行变量 . 填充 ;...
  • 1 votes
     answers
     views

    如何使用递归回溯来解决8个皇后? [关闭]

    更新的代码:我的最后一个问题是如何获得它以便我的程序打印出8x8板的所有92个解决方案,而没有任何Queens相互攻击?到目前为止,我的代码只打印1个解决方案 . 例如,当我将其更改为4x4板时,我只有1个解决方案,当我应该有2个时,我相信 . public class Queen{ public static void display(int[] board){ int n ...
  • 2 votes
     answers
     views

    解释App Verifier输出:堆损坏或错误解释堆栈地址作为堆地址?

    我们有一个测试用例,它会崩溃我们的基于MFC的大应用程序,并出现堆损坏错误 . 我使用App Verifier为有问题的DLL启用了页面堆(不幸的是,由于其他原因,打开整个进程的堆是不可行的 . )验证者没有给我们提供比我们已有的更多信息;它在原始崩溃的同一点触发 . 现在我有两个相互竞争的理论 . 您认为哪种理论更可能是正确的,您接下来的步骤是什么? 这确实是堆腐败 . 验证程序不是在另一个...
  • 1 votes
     answers
     views

    缓冲区溢出esp偏移

    我阅读的是Jon Erickson的“剥削的艺术”(第1版) . 为了练习我在虚拟机中安装了Damn Vulnerable Linux发行版 . 我've disabled ASRL (kernel.randomize_va_space = 0), I'用 GCC 3.4.6 编译了以下代码,我使用 GDB 6.6 ,分发的内核是 2.6.20 . 我的电脑有英特尔处理器 . 易受攻击的程序(t...
  • -1 votes
     answers
     views

    如何实现缓冲区溢出

    我试图使用缓冲区溢出来访问root用户(纯粹出于教育目的) 我编写了以下代码来将所需的输入写入坏文件 int main(int argc, char **argv) { char buffer[512]; FILE *badfile; /* Initialize buffer with 0x90 (NOP instruction) */ memset(buffer...
  • 2 votes
     answers
     views

    利用缓冲区溢出后调用库函数会导致程序崩溃

    我正在尝试使用以下程序执行简单的缓冲区溢出 void not_called() { printf(&quot;Enjoy your shell\n&quot;); char* name[2]; name[0] = &quot;/bin/sh&quot;; name[1] = NULL; execve(name[0], name, NULL); } void vulnerabl...
  • 3 votes
     answers
     views

    没有推动就从堆栈中弹出

    我目前正在学习高级汇编语言,并且一直在讨论堆栈的概念 . 我想我理解得很好,但在实践中我有一些问题 . 堆栈增长,ESP寄存器始终指向堆栈的顶部 . 低内存中的地址 . 如果有东西被推入堆栈,那么ESP应该递减 . EBP用作帧指针,据我所知,应该总是超过ESP . 然而,通过以下计划: stdout.put(esp, nl); stdout.put(ebp, nl); push(ike); st...

热门问题