【发布时间】:2017-08-05 11:51:21
【问题描述】:
我对 C 很陌生,所以如果这是一个愚蠢的问题,我深表歉意。我遇到了分段错误,当我运行 gdb 时,我没有像往常一样获得行号来演示导致错误的原因。相反,我得到了一些类似的东西:
find_any_ptr()中的0x00000000004012ff
我正在编写一个方法来返回指向给定string 中stop 中任何字符的第一次出现的指针,如果string 不包含任何字符,则返回NULL。
char *find_any_ptr(char *string, char* stop){
char* ch1 = string;
char* ch2 = stop;
int retComp = strlen(string);
char* retChar;
while(*ch2 != '\0'){
int temp = 0;
while(*ch1 != '\0'){
if(*ch2 == *ch1){
if(temp < retComp){
*retChar = ch1;
retComp = temp;
}
}
temp++;
ch1++;
}
ch2++;
}
if(retComp == strlen(string)){
return NULL; //NULL has been defined elsewhere
}else{
return retChar;
}
}
如果有人发现根本问题出在哪里,我将非常感谢您的帮助。 :) 谢谢!
【问题讨论】:
-
崩溃发生在
*retChar = ch1,因为retChar是一个未初始化的指针。在命令行上用-Wall编译,你的编译器应该会告诉你这样的事情。 (你可能打算写retChar = ch1) -
除了崩溃之外,在我看来,您正在倒退算法,您的外部循环应该在
string的字符上,内部循环在stop上。您不需要所有这些临时变量,当您第一次找到匹配的字符时,您可以立即将指针返回到您在string中的位置。如果你到达循环的末尾,这意味着你没有发现任何好的东西,所以你必须返回 NULL。 -
在运行 gdb 之前,您是否使用 -g 标志进行编译?
标签: c segmentation-fault gdb