赞
踩
当你声明数组时,你必须用一个编译时常量指定数组的长度。但是,数组的长度常常在运行时才知道,这是由于它所需要的内存空间取决于输入数据。例如,一个用于计算学生等级和平均分的程序可能需要存储一个班级所有学生的数据,但不同班级的学生数量可能不同。在这些情况下,我们通常采用的方法是声明一个较大的数组,它可以容纳可能出现的最多元素。
这种方法简单,但也有好几个缺点:
#include<stdlib.h> 或者 #include<malloc.h>
extern void * malloc(unsigned int num_byte);
当内存不使用时,应使用free()函数将内存块释放
注意:malloc所分配的是一块连续的内存。例如,如果请求它分配100个字节的内存,那么它实际分配的内存就是100个连续的字节,并不会分开位于两块或者多块不同的内存。
void free( void * pointer);
简单举例:
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- char *p;
- p = NULL;
- p = (char *)malloc(100);
-
- if (p != NULL) // 如果内存分配成功
- {
- printf("memory allocated at:%x\n", p);
- }
- else
- {
- printf("not enough memory!\n");
- }
- free(p);
- p = NULL;
-
- return 0;
- }
void * malloc(int size);
例如:
int * p;
p = (int *)malloc(sizeof(int));
int * p =(int *)malloc(1);
代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里面存入一个整数时,会有3个字节无家可归,而直接“住进领居家”!造成的后果是后面的内存中原有数据内用全部被清空。
比如你想分配100个int类型的空间:
int* p = (int *) malloc ( sizeof(int) * 100);//分配可以放得下100个整数的内存空间
- typedef struct data_type
- {
- int age;
- char name[20];
- } data;
-
- data *bob = NULL;
- // 定义一个指针,指向NULL
- bob = (data *)malloc(sizeof(data));
- // 内存分配
-
- if (bob != NULL) // 检测内存是否分配成功
- {
- bob->age = 22;
- strcpy(bob->name, "Robert");
-
- printf("%sis%dyearsold\n", bob->name, bob->age);
- }
- else
- {
- printf("mallocerror!\n");
- exit(-1);
- }
- free(bob); // 释放内存
- bob = NULL; // 内存指向NULL
分配内存但在使用完毕后不释放将引起内存泄漏。内存泄漏会增加程序的体积,有可能导致程序或系统的崩溃。
总结、函数使用的注意事项:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。