【发布时间】:2016-03-17 16:42:41
【问题描述】:
我有一个以
开头的函数void findErrors(int lineIndex){
char *line;
strcpy(line, lines[lineIndex]);
然后调用另一个开头为的函数
void fixErrors(int lineIndex, char *word){
char *line;
strcpy(line, lines[lineIndex]);
第一个函数有效,但是当它调用第二个函数时出现段错误。两个单词的 lineIndex 是相同的,并且 findErrors 不会调用 lines 数组,除非在 strcpy() 中。为什么会这样?这是使用该功能的坏方法吗?我只是在第一个功能上很幸运?如果我将 fixErrors 中的行从
更改,问题就会消失char *line;
到
char line[255];
但我不希望在一条大线上出现另一个段错误。我想我也可以
char *line = malloc(strlen(lines[lineIndex])+1)
但我真的很好奇为什么第一种方法不起作用。
【问题讨论】:
-
char *line = malloc(strlen(lines[lineIndex]))不够用,因为结尾为空字符,您还需要一个字符。 -
您有一个未初始化的指针,并且使用包括指针在内的未初始化变量具有未定义的行为。
-
is this a bad way to use the function and i'm simply getting lucky on the first function...是的,大部分时间。 -
malloc (strlen (x)) 实际上 always 没有“+1”是错误的,应该是编译器检查模式...... . 只要不是,任何程序员都应该检查 ;) 更安全的做法是 strdup(x)
-
@Sourav 我不认为有一个错误的程序会带来好运。我宁愿我的错误程序永远不会起作用。如果没有系统地阻止程序运行,发现故障通常很痛苦。
标签: c