在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. malloc()函数和free()函数首先,我们应该知道。所有的程序都必须留出足够的内存空间来存储所使用的数据,所以我们常常会预先给程序开辟好内存空间,然后进行操作,但事实上另一种选择,能够让内存分配自己主动进行下去。 对于传统数组,会遇到这种问题:
对这个数组我们在定义的时候必须给提前开辟好空间。而且在程序运行的过程中,这个开辟的内存空间是一直存在的。除非等到这个函数运行完成,才会将空间释放。 另一个问题就是这个数组在程序中无法被改动。
在这个程序中,首先开辟了30个double类型的空间,然后把p指向这个空间的位置。在这里的指针是指向第一个double值。 并非我们所有开辟的30个double的空间。 这就和数组一样,指向数组的指针式指向数组首元素的地址,并非整个数组的元素。所以,在这里我们的操作也和数组是一样的,
当我们使用malloc()开辟完内存空间以后,我们所要考虑的就是释放内存空间,在这里,C给我们提供了free()函数。 free()的參数就是malloc()函数所返回的地址,释放先前malloc()函数所开辟的空间。
程序还调用了exit()函数,这个函数是在内存分配失败时结束程序。
这个程序主要用来检測malloc返回值条件有误。 使用动态数组,主要是为了获得程序的灵活性。我们嗯能够须要多少个元素就让数组开辟多少个。。 不须要浪费空间 2.free()的重要性
在这个程序其中我们使用了malloc()函数,可是我们没有使用free()函数,在这个程序中,我们首先进入gobble()函数,穿件了指针temp,而且使用了malloc()函数。可是除了gobble()函数之后,指针作为一个变量消失了,可是所开辟的内存是依旧存在的,我们依旧开辟了16000个字节的内存。 可是我们却无法去訪问这些内存。由于他们的地址不见了。由于没有调用free()函数,这段内存也不能再此使用了。 这样就会出现我们所说的程序泄漏问题,而free()函数,正好攻克了这种的问题。 3.calloc()函数和realloc()函数接下来。我们在认识两个关于内存分配的函数。calloc()函数和realloc()函数。
通过这个样例,我们能够知道calloc()函数有两个參数。而且这两个函数都是size_t类型(unsigned int类型)的数。 第一个參数在这里所说的是所须要开辟的内存单元数量。第二个參数是每一个单元的字节的大小。
calloc()函数另一个特性。它将块中的所有位都置为0。这也是calloc()函数和malloc()函数的差别,calloc()函数和malloc()函数的另外一个差别是他们请求内存数量的方式不一样。当然。free()函数也能够来释放calloc()函数分配的内存。 realloc()函数用来改动一个原先已经分配的内存的大小。使用这个函数,你能够让一块内存增大还是缩小。当扩大时。这块内存原先的内容会依旧保留,新添加的加入到原先的后面。缩小时,该内存的尾部部分内存去掉,剩余保留。 注意:对于realloc()函数。假设原先的内存无法改动。这时候realloc()函数再会分配一块内存。而且把原先那块内存的内容拷贝到上面去。 所以。使用了realloc函数以后,你这时候在使用的就该是realloc函数返回的新指针了。当realloc函数的第一个參数是NULL时,这时候我们能够把它当作是malloc()函数。 写博客已经半个月了,感觉问题还是非常多。希望大家多多指点。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论