动态内存分配

// test.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "stdlib.h"


#define NUM 25


int main(int argc, char* argv[])
{
int *pi;
int *pi2,i;
pi=(int *)malloc(NUM*sizeof(int));
if(pi==NULL){
printf("out of memory\n");
exit(1);
}

pi2=pi;
for(i=0;i<NUM;i++){
*pi2++=0;
printf("%d ",*pi);
}


return 0;
}


函数声明

  void *malloc(size_t size);
  备注:void* 表示未确定类型的 指针 ,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...)
  从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的 指针 ,并且可以自动计算所需要大小。比如:
  int *p;
  p = new int; //返回类型为int* 类型(整数型 指针 ),分配大小为 sizeof(int);
  或:
  int* parr;
  parr = new int [100]; //返回类型为 int* 类型(整数型 指针 ),分配大小为 sizeof(int) * 100;
  而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的 指针
  int* p;
  p = (int *) malloc (sizeof(int)*128);//分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存储到 指针变量 p中
  double *pd=(double *) malloc (sizeof(double)*12);//分配12个double型存储单元,并将首地址存储到 指针变量 pd中
  第一、malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型 变量 ”。所以必须通过 (int *) 来将 强制转换 。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成 强制转换 的习惯。
  第二、函数的 实参 为 sizeof(int) ,用于指明一个 整型数据 需要的大小。如果你写成:
  int* p = (int *) malloc (1);
  代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容被改写。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值