分享

C |动态内存分配:通过指针临时按需分配堆内内存

 无敌风火轮y 2017-04-21

动态分配内存需要包含stdlib.h和mallo.h两个头文件,并利用指针和如下标准函数配合来实现。

void *malloc(size_t size);

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

重点是能够临时按需(size可以是变量)分配内存。

malloc 函数其实就是在内存中找一片指定大小的空间,然后将这个空间的首地址给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址, 这要看malloc函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上是连续的,而在物理上可以不连续。我们作为程序员,关注的 是逻辑上的连续,其它的,操作系统会帮着我们处理的。

#include /* printf, scanf, NULL */

#include /* malloc, free, rand, system */

int main ()

{

int i,n;

char * buffer;

printf ('输入字符串的长度:');

scanf ('%d', &i);

buffer = (char*)malloc(i+1); // 字符串最后包含 \0

if(buffer==NULL) exit(1); // 判断是否分配成功

// 随机生成字符串

for(n=0; n

buffer[n] = rand()%26+'a';

buffer[i]='\0';

printf ('随机生成的字符串为:%s\n',buffer);

free(buffer); // 释放内存空间

system('pause');

return 0;

}

//该程序生成一个指定长度的字符串,并用随机生成的字符填充。字符串的长度仅受限于可用内存的长度。

运行结果:

输入字符串的长度:20

随机生成的字符串为:phqghumeaylnlfdxfirc

C++ 利用new运算符申请内存。

new是c++的关键字,它本身不是函数,new不依赖于头文件,c++编译器就可以把new编译成目标代码。在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:

int *parr;

parr = new int[100];

//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;

(而malloc 必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。因为malloc 函数返回的是 void * 类型。)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多