myqicq 发表于 2015-4-29 18:45:28

malloc申请的空间大小计算

本帖最后由 myqicq 于 2015-4-29 21:06 编辑

看了论坛的一个帖子,自己敲了下代码,有些疑惑!
printf("这是malloc执行后*p的长度=%d\n", (num * sizeof(**p)));//这里num * sizeof(**p)是否等于实际申请到的空间
没人鸟......

代码如下#include <stdio.h>
#include <string.h>
#include <malloc.h>

void GetMemory(char **p, long num){
      printf("这是Test函数传给GetMemory函数里p的地址=%#X\n", p);   //理解 **p 是一个什么东西,有什么作用
      printf("这是malloc执行前*p的值=%s\n", *p);//理解 *p 又是一个什么东西,其作用是什么
      printf("这是*p的长度=%d\n", sizeof(**p));
      *p = (char*)malloc(num * sizeof(**p));   //申请num所指定大小的内存空间
      printf("这是malloc执行后*p的长度=%d\n", (num * sizeof(**p)));
      printf("这是malloc执行后*p的值=%s\n", *p);   
}

void Test(void){
      char *str = NULL;       //申明一个char*空指针变量str
      printf("这是调用GetMemory前str指向空间的值=%s\n", str);
      printf("这是Test函数str的地址=%#X\n", &str);
      GetMemory(&str, 100);   //传str的地址给getmemory函数,在getmemory函数为str申请一块指定长度的内存空间
      printf("这是调用GetMemory后str指向空间的值=%s\n", str);
      strcpy(str, "hello");   //把字符串"hello"复制到str所指向的空间
      printf("这是strcpy执行之后str指向空间的值=%s\n", str);
      printf("%s\n", str);    //打印str所指向的空间里的内容
      printf("str size=%d\n", strlen(str));
      free(str);
}

void main(void)
{
      Test();
      system("pause");
}



myqicq 发表于 2015-4-29 21:07:17

没人鸟我。。。。。。

lluojian 发表于 2015-11-3 22:16:12

**p是指向指针的指针也是有类型的 你要看他的指向
页: [1]
查看完整版本: malloc申请的空间大小计算