代码共享:C 和 C++ 分配内存比较

hongwenjun 2012-08-03 08:31:26
函数声明(函数原型):
void *malloc(int size);
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。

malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct data_type {
int age;
char name[20];
} data;

int main()
{
char* pstr = (char*) malloc(255);
char* ps = new char[255];

strcpy(pstr, "malloc 的用法");
strcpy(ps, "new 的用法");
printf("%s\t%s\n", pstr, ps);

data* bob , *boy ;
bob = (data*) malloc(sizeof(data)); // 分配一个结构
boy = new data; // new 一个结构内存

if (bob != NULL) {
bob->age = 22;
strcpy(bob->name, "Robert");
printf("%s is %d years old\n", bob->name, bob->age);

boy->age = 12;
strcpy(boy->name, "Tom");
printf("%s is %d years old\n", boy->name, boy->age);
}

free(bob); delete boy;

bob = (data*) malloc(sizeof(data) * 20); // 分配一个结构数组
boy = new data[20]; // new 一个结构数组

for (size_t i = 0 ; i != 20; ++i) {
sprintf(pstr + 6 , "->%d", i);
sprintf(ps + 3 , "->%d", i);

bob[i].age = i;
strcpy(bob[i].name, pstr);
printf("%s is %d\t\t", bob[i].name, bob[i].age);

boy[i].age = i;
strcpy(boy[i].name, ps);
printf("%s is %d\n", boy[i].name, boy[i].age);
}

free(pstr); delete ps;
free(bob); delete[] boy;
}
...全文
41 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxun 2012-08-03
  • 打赏
  • 举报
回复
来支持一下

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧