c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

有很大区别。根据以前的编程经验,要点有三点:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。

c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

以下分别说明。

直接定义变量与malloc定义变量的编程含义;malloc事先分配好了内存空间。

在c语言中,malloc函数原型为void *malloc(unsigned int slong),其作用是在内存的动态存储区中分配一个长度为slong的连续空间。此函数的返回值是分配区域的起始地址,如:

char *p;

p=malloc(64000);//空间不够指针为null。

如果用数组定义:

char p[64000],表示的是声明了一个数组,此数组的大小64000个字节。

但是,请注意要点:

系统这时并没有为其分配内存。只是在使用时才分配。

c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

动态内存申请与释放,确保内存的正确使用。

比如,我们在控制系统中,经常要对用户输入的一段零件程序、一个图象文件进行解释、识别,那么首先要做的,是将此文件装入内存中,执行完成后,立即释放。这就需要malloc及free了。延用上面的定义:

fread(p,64000,1,fp);

fclose(fp);

free(p);

要点是随时申请,用完释放。

c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

如果不用malloc,直接定义,在大型软件开发中,一般会导致程序执行异常,出现不可控的结果。

在前两点,都用到char p[64000]及malloc(64000)。

很多初学者,为了省事,喜欢用char p[64000]这样的定义。这样最容易出现bug,尤其是当p指针越大时,出现问题几率越大。

这是因为,对于p[64000]这种写法,如果系统没有足够多的内存使用,那么p[lp]所指向的,可能就是一个其它变量了,或者说p[lp]把其它变量空间覆盖了。

c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

在VC、VS中,情况要稍好,因为管理的内存足够大。

总结:在大型软件开发中,如果不用malloc,直接定义数组,一般会导致程序执行异常,出现不可控的结果。

对于超过1000字节的数组空间,建议用malloc/free,以确保数组变量的绝对正确;小的空间,直接用数组定义即可。

c语言中malloc申请的空间和直接定义变量申请的空间有什么区别。为什么要有malloc这种形式?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论