“我跟你们说,你们知道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. 20145315 《Java程序设计》第一周学习总结

    20145315 <Java程序设计>第一周学习总结 教材学习内容总结 第一章 java原来以橡树为名,后来才改成java,灵感是咖啡. 作者戏称JDK为java developer ki ...

  2. POJ 2923 Relocation(状压DP+01背包)题解

    题意:给你汽车容积c1,c2,再给你n个包裹的体积,问你最少运几次能全运走 思路:用2进制表示每次运送时某物在不在此次运送之中,1在0不在.我们把运送次数抽象成物品价值,把状态抽象成体积,用一个dp[ ...

  3. SpringBoot与Dubbo整合上篇

    最近学习了一下dubbo,是阿里巴巴公司的一个开源服务框架.目前我们公司实现两个不同系统的之间通信,是采用了Oracle的OSB作为服务的管理(即企业服务总线的一种实现),服务提供方在OSB上注册业务 ...

  4. 在MyEclise中使用自己安装的tomcat

    ·将Tomcat配置到MyEclipse中 1.在MyEclipse中打开Window子选项Preferences: 2.在Preferences面板中,点击左边选项中的MyEclipse,找到Ser ...

  5. 使用 shinydashboard

    除了 shiny 扩展包提供的函数之外,RStudio 也开发了一个 shinydashboard 扩展包 (http://rstudio.github.io/shinydashboard/),它呈现 ...

  6. Java IO流-序列化流和反序列化流

    2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者 ...

  7. Linux命令详解-install

    install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. 1.命令格式: (1)install [选项]... 来源 目的地 (2)install [选项]... 来源... 目录 ...

  8. vijos 1082

    描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...

  9. gruntjs开发实例

    Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务,如编译less,sass,压缩js,合拼文件等等. (一)安装nodejs环境,Grunt 0.4.x要求Node.js的版 ...

  10. Leetcode 53

    //经典class Solution { public: int maxSubArray(vector<int>& nums) { ; int maxsum = -INT_MAX; ...