189 8069 5689

c语言增加内存函数 c语言申请内存的函数

在C语言中,如何给函数分配内存?

不知lz有没听说过虚存一说,当源码被编译成二进制文件后,其中的变量,函数的虚拟地址,也就是内存空间中的地址就已确定,在运行时,操作系统为其分配物理内存并添加虚拟地址到物理地址的映射。

创新互联-成都网站建设公司,专注成都网站设计、成都做网站、网站营销推广,主机域名网站空间,网站改版维护有关企业网站制作方案、改版、费用等问题,请联系创新互联

再说的多一点,一个进程(运行的程序)可分为若干段:代码段、数据段、堆栈段等,其中函数所操作的空间(也就是局部变量的空间)就位于堆栈段,所谓函数分配内存大小,实际就是堆栈段指针的变化而已。

c语言动态数组如何扩充空间

c语言动态数组扩充空间,主要是利用动态存储分配库函数来实现的,常用的有malloc函数和calloc函数。

malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。

例如:

char *x;

x = (char *)malloc(10); //x就指向了包含10个字符单元的存储空间。

扩展资料:

函数定义

其函数原型为void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

参考资料来源:百度百科-malloc函数

在C语言中,具有动态申请内存块功能的函数是?

给你介绍两个函数吧:

malloc函数 void * malloc(size) 动态内存分配函数,分配size字节的内存,返回的是指向该区域的指针

realloc函数 void * realloc(void * ptr ,size)重新分配内存,将ptr所指的已分配内存块的大小改为size,返回的也是指向该内存区域的指针

另外都包含在stdlib.h头文件中

楼主说的就是malloc函数了,这两个函数在数据结构中经常用到的

希望可以帮助你

例举两个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语言申请内存的函数
标题链接:http://cdxtjz.cn/article/hhhjpi.html

其他资讯