这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » C语言内存泄漏原因

共10条 1/1 1 跳转至

C语言内存泄漏原因

高工
2023-03-05 09:43:06     打赏

image.png

1 结构体成员指针未初始化


struct student{    char *name;  //这里只是分配了4个字节,没有指向一个合法的地址,内部是一些乱码        int score;}stu, *pstu;
int main(){    strcpy(stu.name, "code"); //所以这里会出错,解决方法就是为name指针malloc一块空间        stu.score = 99;    return 0;}

    另一种错误:

int main(){    pstu = (struct student *)malloc(sizeof(struct student)); //这里还是没分配name内存,只是以为分了而已。    strcpy(pstu->name, "code");    pstu->score = 99;    free(pstu);    return 0;}

2 结构体指针内存分配不够  

int main(){    pstu = (struct student *)malloc(sizeof(struct student *)); //这里写错了 sizeof(struct student),导致内存不足    strcpy(pstu->name, "code");    pstu->score = 99;    free(pstu);    return 0;}

3 内存越界    内存分配成功,且已经初始化,但是操作越过了内存的边界。
    这种错误经常是由于操作数组或指针时出现“多 1”或“少 1”。比如:

int a[10] = {0};for (i=0; i<=10; i++) //这里就越界了,多了一个{    a[i] = i;}

    所以, for 循环的循环变量一定要使用半开半闭的区间,而且如果不是特殊情况,循环变量尽量从 0 开始。4 内存泄漏    一般是malloc或者new操作符分配的内存,若用完之后没有及时free或者delete,这块内存就没法释放,知道程序结束。


(void *)malloc(int size)  //函数原型
/* 具体使用 */char *p = (char *)malloc(100);  //需要强制转换类型,并且指定一个指针接收分配的内存首地址,之后就可以通过指针变量p来访问内存,内存没有名字,所以是匿名访问
/* 存在申请失败的可能,所以应该使用 */ if(NULL != p)/* 来验证内存确实是分配成功了 */
/* 内存释放之后,需要把p的值变为NULL, 否则会出现野指针 */p = NULL;





关键词: C语言     泄漏     内存     原因    

专家
2023-03-05 09:59:08     打赏
2楼

感谢分享


高工
2023-03-05 10:26:22     打赏
3楼

感谢分享


高工
2023-03-05 11:03:39     打赏
4楼

感谢分享


专家
2023-03-05 11:13:22     打赏
5楼

谢谢分享


专家
2023-03-05 13:06:09     打赏
6楼

感谢分享


专家
2023-03-05 13:14:21     打赏
7楼

感谢分享


高工
2023-03-05 13:18:07     打赏
8楼

感谢分享


专家
2023-03-05 14:31:36     打赏
9楼

感谢分享


高工
2023-03-08 10:23:39     打赏
10楼
感谢分享

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]