malloc与realloc的区别
ANSI C说明了三个用于存储空间动态分配的函数 一.mallocmalloc的参数就是所需分配的字节数,malloc在c语言中不是关键字而是C函数库中提供的函数。调用malloc时就是在内存池中提取一块连续的空间,并返回这块内存的指针。代码示例: #include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node;
node *create(int n)
{
node *p = NULL,*head;
head = (node*)malloc(sizeof (node ));
p = head;
node *s;
int i = 1;
if( 0 != n )
{
while( i <= n )
{
s = (node *)malloc(sizeof (node));
s->data = i++; // 为循环链表初始化,第一个结点为1,第二个结点为2。
p->next = s;
p = s;
}
s->next = head->next;
}
free(head);
return s->next ;
}
二.reallocvoid realloc(void *ptr,size_t new_size); ptr是指向原来地址的指针,这个函数用于修改一个原先已经分配内存块的大小。 使用: 1.可以使一块内存扩大或缩小(原来的内存块可以扩大缩小) ??(1.)如果是扩大一个内存块,则将原来的内存块保留在他的后边新增一块内存块(但是新增的内存块并未初始化) ??(2.)如果是缩小一块内存块,则将该内存块的后半部分直接拿掉,剩余部分内存块及其内容保留。 2.原来的内存块无法扩大缩小 ???如果是着这种情况,realloc会重新开辟一个新的内存空间,并把原来的内存空间的内容拷贝到新的内存空间里。 注意:再调用完realloc后就不能使用指向就内存的指针,而是用返回的新的指针。 内存扩展如图所示。 ? 值得一提的是:如果realloc中的第一个参数如果为空则和malloc一样。 #include<Windows.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
const int size = 2000;
int *p = (int *)malloc(20 * sizeof(int));
int *p1 = (int *)realloc(p,size*sizeof(int));
printf("%xn",p);
printf("%xn",p1);
system("pause");
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |