void*malloc(int size);
可以申请一段长度为size字节的空间,并返回空间的首地址。
分配一个Size大小的内存空间,如果分配成功则返回地址空间的首地址,如果分配失败则返回NULL。
虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一
些编译器的检查。对于一个指向一块内存的指针如果用比如sizeof(p)显示大小(int * p=new
int[10]),也只是显示4,代表首地址大小,不能显示正块内存的大小,而且根本没有意义
。
#include <stdio.h>
#include <stdlib.h>
int main()
{ int num;
int i;
int choice;
printf("请输入元素个数:\n");
scanf("%d",&num);
if(num>6)
{ printf("我们没有这么多姑娘,你没礼貌,相亲单方面终止!!!\n");
system("pause");
exit(-1);
}
int *palace=(int*)malloc(num*sizeof(int));
if(palace==NULL)
printf("开辟空间失败,请知晓!!!\n");
for(i=1;i<=num;i++)
{
printf("请输入你们家老%d的年龄:\n",i);
scanf("%d",palace);
palace++;
}
palace=palace-num;
for(i=0;i<num;i++)
{
printf("请确认你们家老%d的年龄:%d\n",i+1,palace[i]);//*palace//
/*palace++;*/
}
printf("请选择你中意的人:\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("恭喜你走上不轨之路,约会(提货)时间在8月1日\n");
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
case 2:
printf("恭喜你相亲成功,你选择的相亲对象为老%d,约会(提货)时间在8月2日\n",choice);
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
case 3:
printf("恭喜你相亲成功,你选择的相亲对象为老%d,约会(提货)时间在8月3日\n",choice);
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
case 4:
printf("恭喜你相亲成功,你选择的相亲对象为老%d,约会(提货)时间在8月4日\n",choice);
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
case 5:
printf("恭喜你相亲成功,你选择的相亲对象为老%d,约会(提货)时间在8月5日\n",choice);
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
case 6:
printf("恭喜你相亲成功,你选择的相亲对象为老%d,约会(提货)时间在8月6日\n",choice);
printf("她的年龄为%d岁\n",palace[choice-1]);
break;
default:
printf("你没有认真做出选择,所有姑娘都瞧不起你,相亲失败!!!\n");
break;
}
free(palace);
palace=NULL;
system("pause");
return 0;
}
在 C 语言中,程序中 malloc 等内存分配函数的使用次数一定要和 free 相等,并一一配对使用。绝对要避免“malloc 两次
free 一次”或者“malloc 一次 free
两次”等情况。这就像我们的婚姻制度,必须是“一夫一妻制”,不能够“多夫一妻”或者“一夫多妻”,这些都是不合法的在 free 之后必须为指针赋一个新值 在使用指针进行动态内存分配操作时,在指针 p 被 free
释放之后,指针变量本身并没有被删除。如果这时候没有将指针 p 置为 NULL,会让人误以为 p 是个合法的指针而在以后的程序中错误使用它。free§ 完之后,一定要将指针变量 p 置为 NULL