2015/12/3 7:23:43翻牌: 20430临幸: 0 最近在移植一份神代码,遇到各种问题。好多个都是内存越界的原因。今天遇到了free(): corrupted unsorted chunks。以前也看过一点关于free是如何释放内存的东西,好久没写博客了,顺道写点吧,老玩也不是个事。 先说一下free(): corrupted unsorted chunks是什么原因。当要释放的内存在使用的时候发生了越界,将这块内存前后的一些信息改掉,就会发生这个错误。malloc和free在debug版下,会在分配的内存前后加上一些额外的信息。大体上是内存的前面32字节是一个结构体,里面记录了分配的内存的大小,4字节的校验位,以及其他信息。内存...
2015/1/14 9:15:7翻牌: 3214临幸: 5 C++用virtual关键字支持多态性。virtual修饰的函数称为虚函数。虚函数的调用是基于运行时对象的真实类型决定的,而非虚函数在编译时就已经根据对象定义的类型决定了。#include <cstdio>
class Base {
public:
int a;
Base() {
printf("Base constructor\n");
}
void fun1() {
printf("Base fun1\n");
}
virtual void fun2() {
p...
2015/1/14 4:5:53翻牌: 3638临幸: 0 
const关键字可以修饰很多东西使其变成常量,用以保护被修饰的东西,下面我列出了一些我遇到的使用情况。指针常量和常量指针 const修饰指针的时候,可以按*号分成左右。如果const在*左面,那么就是指针常量(pointer to const),意味着*p这个值不能变,也就是说不能通过这个指针修改它指向的那块地址的值。如果const在*右面,那么就是常量指针(const pointer),这个指针可以通过*x的方式修改地址的值,那时不能通过x=&b的形式修改x中的地址。如下图,指针常量是黄色地址内的值不变,常量指针是蓝色地址内的值不变。#include <stdio.h>
int ma...
2015/1/13 14:27:21翻牌: 4580临幸: 2 静态变量作用范围在一个文件内,如果其他文件需要访问,要事先extern。程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。静态变量存放在静态变量区。 在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数。 当我们同时编译多个文件时,所有未加static前缀的全局变量...
2015/1/1 2:39:27翻牌: 3866临幸: 2 1. string介绍(1)string类的构造函数如下: a) string s; //生成一个空字符串s b) string s(str) //拷贝构造函数 生成str的复制品 c) string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值 d) string s(str,stridx,strlen) //将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值 e) string s(cstr) //将C字符串作为s的初值 f) string s(chars,cha...