realloc分配内存

来源:百度知道 编辑:UC知道 时间:2024/05/05 03:08:34
#include "stdlib.h"
#include "stdio.h"
#define N 10
void ins(int *p,int n);
void del(int *p,int n);
void display(int *p,int n);
int *q,*r;
void main()
{
int b;
int a[N]={1,2,3,4,5,6,7,8,9,10};
printf(" input the operator number:\n");
do {printf(" 1. insert a element \n\
2. delete a element \n\
3. display every element\n");
scanf("%d",&b);}
while(b!=1&&b!=2&&b!=3);
if(b==1) ins(a,N);
else if(b==2) del(a,N);
else display(a,N);
}
void ins(int *p,int n)
{
int a,b;
do{ printf("input the number of position to insert:");
scanf("%d",&a);
}
while(a<1||a>n);
p=(int*)realloc(p,n+1);
q=p+n,r=p+n-1;
for(b=n-a;b>=0;b--)
*(q--)=*(r--);
printf("input the insert number:\n");
scanf("%d",p

void *realloc(void *block, size_t size)
给一个已分配的指针block重新内存,大小为size

reallc是在malloc的基础上,给一个已经malloc后的指针重新分配内存,你这里没有malloc也就不存在重新分配的问题了。数组地址是固定的,不能改变。这里你应该用指针,不要用数组。
int a[N]={1,2,3,4,5,6,7,8,9,10};
改成:int a*;
a=(int *)malloc(10*sizeof(int));
for(i=0;i<10;i++)*(a+i)=(i+1);

这样后面的子函数里去realloc也就合情合理了。

realloc函数的用法错误!
数组a是函数内部的变量,是堆上分配的。但realloc使用说明明确指出,“如果传入的第一个指针不为空,则其指向的内存空间应该是调用calloc, malloc, or realloc返回的内存”