对NULL指针的解引用操作
void test(){
int* p = (int*)malloc(sizeof(int));
*p = 20; //如果p的值时NULL,就会有问题
free(p);
}
对动态开辟空间的越界访问
void test(){
int i = 0;
int* p = (int*)malloc(sizeof(int) * 10);
if (NULL == p){
exit(EXIT_FAILURE);
}
for (i = 0; i <= 10; ++i){
*(p + i) = i; //这里当i是10的时候越界访问
}
free(p);
}
对非动态开辟内存使用free释放
void test(){
int a = 10;
int* p = &a; //p不是动态开辟的内存
free(p);
}
使用free释放一块动态开辟内存的一部分
void test(){
int* p = (int*)malloc(100);
p++;
free§; //p不再指向动态内存的起始为位置
}
对同一块动态内存多次释放
void test(){
int* p = (int*)malloc(100);
free§;
free§; //重复释放
}
动态开辟内存忘记释放(内存泄漏)
void test(){
int* p = (int*)malloc(100);
if (p != NULL){
*p = 20;
}
}
int main(){
test();
}
忘记释放不再使用的动态开辟的空间会造成内存泄漏.
切记动态开辟的空间一定要释放掉,并且正确释放.