有关void * malloc (unsigned int size) 的溢出问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 11:05:16
int *p=(int *)malloc(1);
p=(int *)malloc(20);

请问:
(1)上叙述的 "1" 和"20" 是只什么意思?
(2)它们是怎么出现溢出的?
(3)假如上题改为
int *p=(int *)malloc(sizeof int);
p=(int *)malloc(sizeof int);
是否就不出现溢出了呢?
(4)如果想释放新创建的内存空间,除用free(*p)还可用什么?
(5)请问
int *p=(int *)malloc(1);
p=(int *)malloc(20);
上题怎样改就可以不发生溢出?

int *p=(int *)malloc(1);
p=(int *)malloc(20);

正确:int *p=(int *)malloc(2);
p=(int *)malloc(sizeof(int));

这里的malloc中的参数是待分配的类型在内存中所占的字节数,比如在C语言中,int 占2个字节,所以这里是2,如果是其他类型,例如:
double *p = (double *)malloc(8);
or
double *p = (double *)malloc(sizeof(double));
只能用free();来释放