当前位置: 首页 > 知识库问答 >
问题:

c ' STD::bad _ alloc ' what():STD::bad _ alloc

巫马化
2023-03-14

我正在尝试运行下面的C代码,我得到这个错误:任何人都可以帮我澄清为什么这是问题 输入:输入/text_4.txt 9

在抛出'std::bad_alloc'什么()的实例后终止调用:std::bad_alloc中止(核心转储)在读取了几个类似的线程后,解决方案是检查动态存储分配。但是,我的代码没有任何动态分配的内存

输入文件text_4.txt:

这是因为在波德莱尔三个年轻人的生活中,没有多少快乐的事情发生。

输入:输入/text_4.txt 8

共有1个答案

后烨煜
2023-03-14

当我运行你的代码时,在安排文件中的外环的i==16迭代中,我们得到宽==8总==10检查==1。结果,甚至被初始化为-2,因此而(even--)循环(几乎)是无限的。因此,它试图向low添加空格,直到它运行内存溢出。

(请注意,std::string使用的内存是动态分配的,因此您的代码确实具有动态存储分配。std::向量也是如此。)

我还没有对你的算法进行足够仔细的分析,以找出正确的修复方法,但有可能你的循环应该是同时(甚至 -

我会在评论中支持使用您的调试器的提示,我会重新发布链接:什么是调试器,它如何帮助我诊断问题?。这就是我发现这个错误的原因。

我在调试器gdb下运行了这个程序。它运行了几秒钟,这时我开始怀疑,因为这个程序似乎没有做任何复杂到足以花费那么多计算时间的事情。所以我中断了程序(Ctrl-C),让我看到它在哪里以及它在做什么。我可以看到它在while(even--)循环中。这也很可疑,因为那个循环应该完成得很快。所以我检查了的值,甚至(使用命令p偶),发现它是一个很大的负数。这只有在它以负数开始时才会发生,从逻辑上讲,这只有在大于宽度时才会发生。检查它们的值,我可以看到确实如此。

当您了解更多关于使用调试器的信息时,这可能会有所帮助。

 类似资料:
  • 我在理解条件变量及其在互斥体中的使用时遇到了一些困难,我希望社区能帮助我。请注意,我来自win32背景,因此与CRITICAL_SECTION、HANDLE、SetEvent、WaitForMultipleObject等一起使用。 这是我第一次尝试使用C++11标准库进行并发操作,它是在这里找到的一个程序示例的修改版本。 关于这个的几个问题。 我读过“任何要等待std::condition_var

  • 并行开发挺复杂的,特别是在试图用好线程和锁的过程中。如果要用到条件变量或std-atomics(一种无锁开发方式),那就更复杂了。C++0x提供了future和promise来简化任务线程间的返回值操作;同时为启动任务线程提供了packaged_task以方便操作。其中的关键点是允许2个任务间使用无(显式)锁的方式进行值传递;标准库帮你高效的做好这些了。基本思路很简单:当一个任务需要向父线程(启动

  • 标准库函数bind()和function()定义于头文件<functional>中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int

  • 我有两个用例。 a.我想为两个线程同步对队列的访问。

  • 两者之间有实际区别吗 和 ? 看起来包含常量元素的非常量数组仍然无法交换,赋值运算符也不起作用<我什么时候应该选择一个而不是另一个?

  • std::forward_list是一个基本的单向链表。它只提供了前向迭代器(forward iteration);并在执行插入/删除操作后,其他节点也不会受到影响(译注:其它迭代器不失效)。它尽可能减少所占用空间的大小(空链表很可能只占用一个word2 (译注:2Byte))且不提供size()操作(所以也没有存储size的数据成员),简略原型如下: template <ValueType T,

  • async-std 是 Rust 标准库的异步版本。 入门 首先在Cargo.toml添加如下内容:  [dependencies]async-std = "0.99" 或者使用 cargo add : $ cargo add async-std Hello world #![feature(async_await)]use async_std::task;fn main() { task:

  • 我在std::sort中发现了一个bug,特别是在一些QuickSort的实现中,我不知道问题是否出在一般的算法中。 精华: 当元素小于16时,所有的规范都被替换,因为std::sort使用插入排序。 当有17个或更多的元素时,使用快速排序,并从元素数量的对数限制递归深度,但向量在第一次__introsort_loop迭代时有时间恶化。 当有许多相同的元素时,就会出现向量损坏。用无效迭代器替换有效