alloca: 是向栈申请内存,因此无需释放.
calloc:初始化内存,设置为0. calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
malloc不能初始化所分配的内存空间, 如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之, 如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据 可以看出和memset的联合使用时必须的。 也呼应了前面内存释放只是改变权限问题。
realloc:是从堆上分配内存的.当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;如果数据后面的字节不够,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上.这句话传递的一个重要的信息就是数据可能被移动
另外说下指针:今天用OpenSSL的错误。
char* demo = (char*)calloc(0, 10);
memset(demo, 0, 10);
if (demo == NULL) {
cout << "wangiu" << endl;
}//就是置0了,也不会等于NULL, 要自己指定。