【发布时间】:2020-08-26 07:40:00
【问题描述】:
我正在练习我的编程和内存分配。当我在没有 valgrind 的情况下执行时,程序可以正常工作,它会做它需要做的事情。然后我用 valgrind 执行,看看我是否有任何内存泄漏。这是我用 valgrind 执行时得到的。我有点新,我找不到为什么我有这么多内存泄漏或错误。代码如下。谢谢!!
1 #include <stdio.h>
2 #include <stdlib.h>
3 int* fun(int *l){
4 int *k;
5 k = (int *)malloc (4*sizeof(int));
6 for(int i = 0; i<4; i++){
7 k[i] = 2*l[i];
8 l[i] += 1;
9 }
10 return k;
11 free(k);
11 }
12 int main(){
13 int *s;
14 int *t;
15 s = (int *)malloc (4*sizeof(int));
16 s[0] = 2; s[1] = -3; s[2] = 5; s[3] = 0;
17 t = fun(s);
18 for(int i = 0; i<4; i++){
19 printf(" %d %d\n", s[i], t[i]);
20 }
21 free(s);
22 free(t);
23 return 0;
24 }
【问题讨论】:
-
语句
free(k)由于前面的return语句而无法访问。 -
如果我把 free(k) 放在返回 if 我删除 free(k) 之前,我也会得到内存泄漏
-
请不要发布图片:而是将数据作为文本复制/粘贴到问题中。请不要张贴行号。为了重现问题,我们必须编辑每一行以删除行号
-
OT: about:
k = (int *)malloc (4*sizeof(int));1) 返回的类型是void*,可以分配给任何指针。强制转换只会使代码混乱并且容易出错。 2) 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功,请调用perror( "your error message");将您的错误消息和系统认为错误发生的文本原因正确输出到stderr。 -
我投票结束这个问题,因为发布的代码不会导致生成 valgrind 错误消息
标签: c memory memory-management memory-leaks valgrind