2011年10月30日
摘要: #include <stdio.h>void main(){int a = 0;int b = 0;int *c = &a;int *m = new(int);int *n = new(int);int *k = new(int);int *l = new(int);printf("在栈中分配存储空间\n");printf("%d\n%d\n%d\n%d\n",&a,&b,c,&c);printf("在堆中分配存储空间\n");printf("%d\n%d\n%d\n%d\n&qu 阅读全文
posted @ 2011-10-30 23:24 COS 阅读(200) 评论(0) 推荐(1) 编辑
摘要: C语言内存分配问题1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。全局局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。文字常量区:例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。程序代码区:用来存放程序的二进制代码。例子(一)int a = 0; 阅读全文
posted @ 2011-10-30 23:21 COS 阅读(550) 评论(1) 推荐(2) 编辑
摘要: 一、malloc/calloc名称:Malloc/calloc功能:动态内存分配函数头文件:#include<stdlib.h>函数原形:void*malloc(size_tsize);void*calloc(size_tnum,size_tsize);参数:size分配内存块的大小num 分配内存块的个数返回值:成功返回分配内存块的首地址,失败返回NULL.malloc和calloc都可以分配内存区,但malloc一次只能申请一个内存区,calloc一次可以申请多个内存区.另外calloc会把分配来的内存区初试化为0,malloc不会进行初始化.#include<stdio 阅读全文
posted @ 2011-10-30 23:20 COS 阅读(375) 评论(0) 推荐(1) 编辑
摘要: 先上一段测试程序:char *aa() { char *p = malloc(10); // 动态分配,"hello" 存于" 堆"(heap) p[0] = 'h'; p[1] = 'e'; p[2] = 'l'; p[3] = 'l'; p[4] = 'o'; p[5] = '/0'; printf("sub aa pointer: %p/n", p); printf("sub aa content: %s/n", 阅读全文
posted @ 2011-10-30 23:15 COS 阅读(286) 评论(0) 推荐(1) 编辑
摘要: 题记:学习C++的这一段时间中,在网络上获益颇多,在此感谢各位提问者与热心的解答者,尤其是那些认真的解答者。本人由于能力有限,不喜欢写任何东西发贴,即使是问题也只是搜索解决而已。最近看inside the c++ object model,发现很有困难,因此觉得有必要将动态内存创建,继承与多态等方面深入理解。这就是本贴的来由,文章有点罗嗦冗长,如有感兴趣者浏览并对您有稍微一点帮助,那即是本人无限的荣幸,同时希望各位能够给出一些有益的建议(本人邮件:danielswjtu@eyou.com),在此表示感谢。 本文内容都摘自各出版物,稍微加以排列组合而已,同时也只是初步归纳。相关参考文献见... 阅读全文
posted @ 2011-10-30 23:13 COS 阅读(317) 评论(0) 推荐(1) 编辑
摘要: 一般情况是指针访问越界,内存越界,当发生这个错误的时候,需要检查所有的出现指针访问,内存处理,包括内存分配,扩展,释放等等。 阅读全文
posted @ 2011-10-30 20:04 COS 阅读(3397) 评论(0) 推荐(1) 编辑
摘要: 静态与动态内存分配的两个主要区别是: 1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。 2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但不需要做任何事情。相反,动态对象的分配与释放, 必须由程序员显示地管理,相对来说比较 容易出错,它通过new和delete两个表达式来完成。对象的动态分派可通过new表达式的两个版本之一来完成。第一个版本用于分配特定类型的单个对象 例如: int *pint = new int(1024); 表达式返回对象在内存中的地址。接着,这个地址被用来初始化指针对象pint。 new表达式的 阅读全文
posted @ 2011-10-30 16:21 COS 阅读(188) 评论(0) 推荐(1) 编辑
摘要: calloc(), malloc(), realloc(), free()void *calloc(size_t nobj, size_t size);分配足够的内存给nobj个大小为size的对象组成的数组, 并返回指向所分配区域的第一个字节的指针;若内存不够,则返回NULL. 该空间的初始化大小为0字节.char *p = (char *) calloc(100, sizeof(char));void *malloc(size_t size);分配足够的内存给大小为size的对象, 并返回指向所分配区域的第一个字节的指针;若内存不够,则返回NULL. 不对分配的空间进行初始化.char * 阅读全文
posted @ 2011-10-30 16:16 COS 阅读(314) 评论(0) 推荐(1) 编辑