使用malloc和free时的一些注意事项

在C中,动态内存是一个让人又爱又恨的,这里对malloc和free的使用进行一定的小介绍。

一般而言,先通过malloc(或calloc等函数)分配动态内存,然后通过free来进行内存的释放。但有时会出现free失败的情况。如下列程序:

#include

#include

#include


int main()

{

int i = 10;

int j = 0;

int * p = (int *)malloc(sizeof(int)*i);

while(j

j++;

p[j] = j;

}

free(p);

return 0;

}

这是因为在给动态内存的赋值过程中,赋予的值超出了动态内存的大小(*p指向的是数量为10的数组,即p[10]是不存在,但循环中给p[10]赋值了),从而引起错误。

因此,malloc和free结合起来可以用来对检测是否对超出数组范围内的数据进行操作。

如下:

# include
# include
# include
#define SIZE 9
#if 0
int wf_buff(int * bu)
{
int i = SIZE+1;


while(i){
bu[--i] = 88;
}
free(bu);
}
#else
int wf_buff(int *bu)
{
int i = SIZE+1;
while(i){
bu[--i] = 88;
}
}
#endif


int main()
{
int i = 0;
// int * bu = (int *)calloc(sizeof(int),SIZE);
int bu[SIZE];
i = SIZE+1;


wf_buff(bu);




for(i=0;i<(SIZE+1);i++){
printf(" %d",bu[i]);
}
printf("\n%d\n",bu[SIZE]);

// clean_buff(bu);

return 0;
}


这是几篇相关的详细博客:

c++ new和delete产生的debug error:       http://blog.csdn.net/phenixyf/article/details/49304903

使用 malloc后free出错 错误所在:             http://blog.csdn.net/stephen_yu/article/details/7359084

vc++6.0查看程序中内存:                         http://blog.csdn.net/mylinchi/article/details/52661581



你可能感兴趣的:(C语言)