查看: 4054|回复: 3
打印 上一主题 下一主题

内存分配与内存释放

[复制链接]
跳转到指定楼层
沙发
发表于 2014-8-8 09:16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
malloc
1. 某32 位系统下, C++程序,请计算sizeof 的值。
  1. char str[] = “http://www.ibegroup.com/” ;
  2. char *p = str ;
  3. int n = 10;
  4. 请计算
  5. sizeof (str ) = ?(1)
  6. sizeof ( p ) = ?(2)
  7. sizeof ( n ) = ?(3)
  8. void Foo ( char str[100]){
  9. }
  10. 请计算
  11. sizeof( str ) = ?(4)
  12. void *p = malloc( 100 );
  13. 请计算
  14. sizeof ( p ) = ?(5)
复制代码

答案是:
(1).25 (2).4 (3).4 (4).4 (5).4

2. 如程序清单11. 1 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 1 malloc()的应用1
  1. void GetMemory(char *p)
  2. {
  3. p = (char *)malloc(100);
  4. } void Test(void)
  5. {
  6. char *str = NULL;
  7. GetMemory(str);
  8. strcpy(str, "hello world");
  9. printf(str);
复制代码

3. 如程序清单11. 2 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 2 malloc()的应用2
  1. char *GetMemory(void)
  2. {
  3. char p[] = "hello world";
  4. return p;
  5. }
  6. void Test(void)
  7. {
  8. char *str = NULL;
  9. str = GetMemory();
  10. printf(str);
  11. }
复制代码

4. 如程序清单11. 3 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 3 malloc()的应用3
  1. void GetMemory(char **p, int num)
  2. {
  3. *p = (char *)malloc(num);
  4. } void Test(void)
  5. {
  6. char *str = NULL;
  7. GetMemory(&str, 100);
  8. strcpy(str, "hello");
  9. printf(str);
  10. }
复制代码

5. 如程序清单11. 4 所示,请问这个会是输出什么?
程序清单11. 4 malloc()的应用4
  1. #include <stdio.h>
  2. char *str()
  3. {
  4. char *p = "abcdef";
  5. return p;
  6. } int main(int argc, char *
  7. argv[])
  8. {
  9. printf("%s", str());
  10. return 0;
  11. }
复制代码






回复

使用道具 举报

板凳
 楼主| 发表于 2014-8-8 09:19:29 | 只看该作者
11.2 malloc(0)
1. 把这个独立开来是因为很少这样使用,但是又会使用。如程序清单11. 5 所示,程序会
输出什么?

  1. int main(int argc, char *argv[])
  2. {
  3. char *ptr = NULL;
  4. if ((ptr = (char *)malloc(0)) == NULL)
  5. {
  6. printf("Null pointer\n");
  7. printf("ptr = %#x\n", ptr);
  8. } else
  9. {
  10. printf("Valid pointer\n");
  11. printf("ptr = %#x\n", ptr);
  12. } return 0;
  13. }

复制代码
很多人的第一个感知是输出:Null pointer!
但是很遗憾,是输出Valid pointer!虽然ptr 所开辟的内存空间为0,但是ptr
是不会等于NULL 的
回复 支持 反对

使用道具 举报

地板
发表于 2014-8-8 10:02:55 | 只看该作者
学到了,都是很精妙的知识点
回复 支持 反对

使用道具 举报

4#
发表于 2014-8-8 12:31:25 | 只看该作者
{:soso_e163:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表