/*
** 增加内存
*/
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#define N 5
jmp_buf buf;
void func()
{
int *p, *pa = NULL;
int i;
p = malloc(N * sizeof(int));
if(NULL == p)
longjmp(buf, 1);
for(i = 0; i < 2*N; i++)
{
if(i > N - 1)
{
if(NULL == pa)
{
pa = realloc(p, 2 * N * sizeof(int));
}
if(NULL == pa)
longjmp(buf, 2);
pa[i] = i;
}
else
{
p[i] = i;
}
}
for(i = 0; i < 2*N; i++)
{
printf("pa[%d] = %d/n", i, pa[i]);
}
}
int main()
{
int errn = setjmp(buf);
if(errn)
{
switch(errn)
{
case 1:
printf("malloc return null/n"); exit(1);
case 2:
printf("realloc return null/n"); exit(1);
}
}
func();
return 0;
}
/*
** 缩小内存
*/
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#define N 8
#define M 4
jmp_buf buf;
void func()
{
int *p, *pa = NULL;
int i, j;
p = malloc(N * sizeof(int));
if(NULL == p)
longjmp(buf, 1);
for(i = 0; i < M; i++)
{
p[i] = i;
}
if(i < N)
{
pa = realloc(p, i*sizeof(int));//千万不要忘记*sizeof(int)
if(NULL == pa)
longjmp(buf, 2);
}
for(j = 0; j < i; j++)
{
printf("pa[%d] = %d/n", j, p[j]);
}
}
int main()
{
int errn = setjmp(buf);
if(errn)
{
switch(errn)
{
case 1:
printf("malloc return null/n"); exit(1);
case 2:
printf("realloc return null/n"); exit(1);
}
}
func();
return 0;
}