【发布时间】:2018-11-21 01:06:00
【问题描述】:
例如,我有一些这样的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *func(char *p) {
p = malloc(32);
memcpy(p, "hello", 6);
return p;
}
int main() {
char *s = NULL;
char *s2 = NULL;
s2 = func(s);
printf("%s\n", s2);
free(s2);
return 1;
}
代码可以运行,但是有一个潜在的错误,s 不会指向*p(假设程序员的意图是给 s 分配内存,)。可以很快找到错误,因为它非常简单。但是在一个包含很多很多代码的大型项目中,有时很难找到这样的错误。 gcc -Wall -Wextra 不发出警告。
有什么工具可以找出这种错误吗?
【问题讨论】:
-
Valgrind、GDB 等
-
s在调用func后根本没有使用,所以这是一个奇怪的例子 -
s不会指向*p不是“潜在错误”。很明显s总是NULL。 -
@WeatherVane 我认为 OP 意识到了这一点。这是一个“错误”示例,它没有将指向指针的指针作为输出参数并让函数填充指针。
-
@TypeIA 因为从未使用过
s,它的作用尚不清楚,但s2似乎做得很好。
标签: c gcc gcc-warning