#include <malloc.h>
void main()
{int a=10
int p*//定义了一个整数类型的指针
p=malloc(sizeof(int)*a)//分配40个字节的内存空间
*p=5
*(p+1)=6//将分配的内存空间的前两个整数赋值为5和6
free(p)//使用完之后释放内存空间
}
生成大链表,最好里面用大节点,这样可以加速内存的耗尽,分配时用calloc申请内存,malloc也可以,生成中的节点中多用指针,然后指针不指空值(这样就有可能指到系统区去),这里的用三个do{}while(1)来实现,一个是生成链表,一个是用链表节点值做任意的运算——这两个是同一等级的,还有一个是最外层。这里一定是要用到break的……思路是这样的,你也是这样想的吧,想必我说的就是你想的,只是你在编译是总是不得过,对啊,呵呵,别傻啦,我们能找到的编译器是要做安全性检查的(不光是一些语法的)除非,你在写之前,自己先写一个编译器来……或者你已经找到了这样的工具
但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,需要使用动态数组。动态数组是相对于静态数组而言。动态数组的内存空间是从堆(heap)上分配的,是在执行代码过程中分配的,当程序执行到这些语句时,才为其分配。注意,程序员自己负责释放内存。1
2
#include<stdio.h>
#include<stdlib.h>
int main(int arcv, char * argv[])
{
int arrLen
char *array
char c
int i
printf("please set the size of the len:\n")
scanf("%d", &arrLen)
array = (char *)malloc(arrLen*sizeof(char))
if(array == NULL)
{
printf("malloc fail\n")
return -1
}
for(i = 0i <arrLeni++)
{
c = getchar()
array[i] =c//*array++ =c
}
for( i = 0i <arrLeni++)
{
printf("this array is %c\n", array[i])
}
free(array)
return 0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mallco和free成对出现,在用完申请的内存之后及时释放,否则会造成内存泄漏。
我们在一些项目中经常出现内存泄漏