“我跟你们说,你们知道STL容器,vector/string/deque等等,都有个reserve方法吗?你们一个个地push_back,嫌C++比C慢,怪谁?”

“要像我这样,预先分配足够大的空间,这样push_back的时候才快,明不明白?”

“别老说写C比写C++好,因为C代码怎么运行的都在自己掌控之中,还快,那是因为你们不懂C++。”

----------------------------------------------------------------------------------------------------------------------------------------

#include <cstdio>
#include <vector>
using namespace std; struct Node
{
int i = 0;
Node* next = nullptr;
Node(int _i) : i(_i) { }
}; const int N = 3; // 某人以为的"足够大"的数
vector<Node> odd; // 存放偶数: 0,2,4,6...
// 偶数节点指向比自己大1的奇数节点
vector<Node> even; // 存放奇数: 1,3,5,7...
// 奇数节点指向比自己小1的偶数节点 // 于是对于Node node, 只需调用node.next->i就能实现node.i ^ 1这样的亦或运算
// [不要考虑这个功能意义在哪] void init() // 初始化, 两个vector都申请"足够多"的空间
{
odd.reserve(N);
even.reserve(N);
} void add()
{
if (!even.empty())
{
even.push_back(odd.back().i + 1); // 插入2n+1
odd.push_back(even.back().i + 1); // 插入(2n+1)+1=2n+2
}
else
{
even.push_back(0);
odd.push_back(1);
}
odd.back().next = &even.back(); // 2n+1指向2n+2
even.back().next = &odd.back(); // 2n+2指向2n+1
} void XOR_Simulate()
{
for (int i = 0; i < 3; i++)
add();
printf("%d ^ 1 = %d\n", odd[0].i, odd[0].next->i);
printf("%d ^ 1 = %d\n", even[0].i, even[0].next->i);
} int main()
{
init();
printf("run XOR_Simulate()\n");
XOR_Simulate();
printf("OK, now, run XOR_Simulate() again!\n");
XOR_Simulate();
return 0;
}

直接上代码,贴几个运行结果

唉,都不想多说了,我今天还就踩了这么弱智的陷阱。只不过在较多的代码中没有正确地找到原因。

这种隐藏的错误刚开始的时候不会出现什么问题,而到了后面,这颗定时炸弹被引爆的时候,只能手足无措地看着segmentation fault或者由于abort()以错误free() invalid next size开头的一大段Memory Map信息。

【free() invalid next size】谨慎地在C++的类中存储指针来方便访问其他节点的更多相关文章

  1. C/C++动态分配连续空间,下标越界导致的free():invalid next size问题

    昨天帮导师做的一个程序出了内存泄露的bug(在VS上程序运行一切正常,等return返回后才出错) 而且是程序运行结束后才出现的错误,在退出前一切代码都顺利执行完了,只是return之后出错. 之后我 ...

  2. C语言扩展动态内存报错:realloc(): invalid next size: 0x0000000002365010 ***

    晚上被这个内存扩展崩溃的问题折腾的有点崩溃,当答案揭晓的那一刻,恍然大悟,原来如此简单. 练习题目:输入一个字符串,根据字母进行排序,说白了就是一个简单的冒泡 #include <stdio.h ...

  3. java.util.zip.ZipException: invalid entry size 解决办法

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...

  4. C 语言 *** glibc detected *** free(): invalid next size (fast): 0x0000000000be1010 ***

    . . . . . LZ 今天在写一个 Socket 程序的时候使用 malloc(3) 在堆上动态分配了一个结构体的空间,在使用完之后用 free(3) 函数释放空间的时候报 invalid nex ...

  5. free(): invalid next size (fast/normal)问题

    本文转自 http://blog.sina.com.cn/s/blog_77f1e27f01019qq9.html  ,在此感谢! c++编译常会出现free(): invalid next size ...

  6. Error : Invalid Allocation Size :·····Bytes 以及 abort() has been called

    把这两个Error放在一起,主要是因为在写代码的时候发现,他们有公共的错误. (一)Invalid Allocation Size 主要是因为new分配内存出了问题,从直观翻译来看,应该是内存分配长度 ...

  7. java.util.zip.ZipException: invalid entry size

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...

  8. Solve Error: "errcode": 40016, "errmsg": "invalid button size hint"

    在使用微信官方给的添加自定义菜单的示例代码: { "button": [ { "name": "扫码", "sub_button& ...

  9. R语言 启动报错 *** glibc detected *** /usr/lib64/R/bin/exec/R: free(): invalid next size (fast): 0x000000000263a420 *** 错误 解决方案

    *** glibc detected *** /usr/lib64/R/bin/exec/R: free(): invalid next size (fast): 0x000000000263a420 ...

随机推荐

  1. CEF3开发者系列之CefEnableHighDPISupport详解

    在CEF3中,CefEnableHighDPISupport()这个接口函数在使用时一般不为人所注意,但是如果稍有不慎,会造成打开的网页不能填满窗口的问题.如果是需要flash插件才能运行的游戏.则会 ...

  2. Python3基础 三元运算符 简单示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. Ubuntu下录制屏幕并转换成gif【转】

    本文转载自:https://blog.csdn.net/u012964944/article/details/50464263 *录制屏幕 1)打开Ubuntu软件中心,安装RecordMyDeskt ...

  4. windows下通过ping和tracert工具来测试网站访问速度

    一.环境 OS: windows 二.步骤 2.1.ping mirrors.163.com Pinging mirrors.163.com [23.111.1.151] with 32 bytes ...

  5. Ubuntu 安装zookeeper

    下载zookeeper   Zookeeper下载 下载以后将文件迁移到/home/Hadoop/文件夹下面 hongdada@ubuntu:~/Downloads$ sudo mv zookeepe ...

  6. Python学习札记(四十一) IO 1

    参考:IO NOTE A.Pre 1.IO在计算机中指Input/Output,也就是输入和输出. 2.IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但 ...

  7. JS学习笔记(模态框JS传参)

    博主最近基于django框架的平台第一版差不多完成了 今天整理下开发过程中遇到的前端知识 基于前端bootstrap框架模态框传参问题 上前端html代码: <div class="m ...

  8. uva10655矩阵快速幂

    a^(n+2)+b^(n+2)=(a+b)*(a^(n+1)+b^(n+1))-a*b*(a^n+b^n) 坑爹的题目关系式都推出来了居然还是wa了..... 不能只看p,q=0就退出,因为a,b不一 ...

  9. STL中的map

    map 容器 提供 1 对 1 的关系 定义方式: map<string,int>mp; 写在前面的是关键字. 数据插入: 1.使用 insert 插入 pair 数据 mp.insert ...

  10. CF 160D Edges in MST 最小生成树的性质,寻桥,缩点,批量处理 难度:3

    http://codeforces.com/problemset/problem/160/D 这道题要求哪条边存在于某个最小生成树中,哪条边不存在于最小生成树中,哪条边绝对存在于最小生成树中 明显桥边 ...