重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言函数中申请的内存 c语言指针申请内存空间

C语言如何申请内存?

#include stdio.h

创新互联专业为企业提供新巴尔虎左网站建设、新巴尔虎左做网站、新巴尔虎左网站设计、新巴尔虎左网站制作等企业网站建设、网页设计与制作、新巴尔虎左企业网站模板建站服务,十余年新巴尔虎左做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

#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); //使用完之后释放内存空间

}

C语言申请内存?

但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,需要使用动态数组。动态数组是相对于静态数组而言。动态数组的内存空间是从堆(heap)上分配的,是在执行代码过程中分配的,当程序执行到这些语句时,才为其分配。注意,程序员自己负责释放内存。

1

2

#includestdio.h

#includestdlib.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 = 0; i arrLen;i++)

{

c = getchar();

array[i] =c;//*array++ =c;

}

for( i = 0; i arrLen; i++)

{

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成对出现,在用完申请的内存之后及时释放,否则会造成内存泄漏。

我们在一些项目中经常出现内存泄漏

C语言的内存申请?

用户申请的内存在堆上,程序中其他的内存几乎都在栈上。

申请的内存可以动态调整,比如例子中你申请的内存大小是由用户输入的n来决定的,想申请多大就多大很方便,但是用完后必须手动释放,否则就会造成内存泄漏。而栈上的内存很固定,你不能随便调整,并且在编译后就确定了,但是当运行结束后他会自动释放,不会有内存泄露的危险。

例举两个c语言中申请内存空间的函数

上面那个,你貌似不懂耶

看好了

malloc

原型:extern void *malloc(unsigned int num_bytes);

用法:#include alloc.h

功能:分配长度为num_bytes字节的内存块

说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放。

举例:

// malloc.c

#include syslib.h

#include alloc.h

main()

{

char *p;

clrscr(); // clear screen

p=(char *)malloc(100);

if(p)

printf("Memory Allocated at: %x",p);

else

printf("Not Enough Memory!\n");

free(p);

getchar();

return 0;

}

free

原型:extern void free(void *p);

用法:#include alloc.h

功能:释放指针p所指向的的内存空间。

说明:p所指向的内存空间必须是用calloc,malloc,realloc所分配的内存。

如果p为NULL或指向不存在的内存块则不做任何操作。

举例:

// free.c

#include syslib.h

#include alloc.h

main()

{

char *p;

clrscr(); // clear screen

textmode(0x00);

p=(char *)malloc(100);

if(p)

printf("Memory Allocated at: %x",p);

else

printf("Not Enough Memory!\n");

getchar();

free(p); // release memory to reuse it

p=(char *)calloc(100,1);

if(p)

printf("Memory Reallocated at: %x",p);

else

printf("Not Enough Memory!\n");

free(p); // release memory at program end

getchar();

return 0;

}

为什么很多人不喜欢c,c++,因为管理内存的一部分任何必须由程序员自己管理,不然很容易内存泄露,现在有很多检查内存泄露的软件比较常用的有(boundchecker)有兴趣的可以下个试一下自己的程序,你会发现自己好可怕。malloc free使用一般有几个原则(自己总结的,不一定正确,但很实用)

1 ,malloc free必须配套使用,并且尽可能逆序。

2 ,谁malloc的谁free

3,能够不动态分配的尽量不动态分配,动态分配是很费时间的,而且存在一定的风险。

很多人喜欢这样写程序:

type * f()

{

type *t = (type*)malloc ( sizeof(type));

.

.

return t ;

}

这个肯定会出问题,一般象这种情况,一般声明f(type* t),谁调用它谁为t分配空间,谁来释放它的空间。不过很有意思的是,在有写系统函数的会这样.如(char* asctime() ,它返回一个表示时间的字符指针,但是并不要求你释放,你也没有办法释放,但是我可以肯定它这个串肯定不是在堆区分配的)

free的顺序也很重要,很多时候free的时候会出现空指针的引用,不足为齐。有人提议free(t);t = NULL ;这种用法,有一定的道理,当你free一块空间后,操作系统不会立即回收,所以在你再次用t的时候可能还是可以用的,t就成了个野指针,而将其t = NULL后,对t的引用会出问题。


分享名称:c语言函数中申请的内存 c语言指针申请内存空间
网页URL:http://cqcxhl.cn/article/hihcpi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP