C 我的分段错误发生在哪里?
我对C非常陌生,所以如果这是一个愚蠢的问题,我很抱歉。我得到了一个分段错误,当我运行gdb时,我没有像通常那样得到一个行号来证明是什么导致了错误。取而代之的是,我得到了如下线索: 查找任何ptr中的0x00000000004012ff 我正在编写一个方法,返回一个指针,指向给定字符串中stop中第一个出现的任何字符,如果字符串不包含任何字符,则返回NULLC 我的分段错误发生在哪里?,c,segmentation-fault,gdb,C,Segmentation Fault,Gdb,我对C非常陌生,所以如果这是一个愚蠢的问题,我很抱歉。我得到了一个分段错误,当我运行gdb时,我没有像通常那样得到一个行号来证明是什么导致了错误。取而代之的是,我得到了如下线索: 查找任何ptr中的0x00000000004012ff 我正在编写一个方法,返回一个指针,指向给定字符串中stop中第一个出现的任何字符,如果字符串不包含任何字符,则返回NULL char *find_any_ptr(char *string, char* stop){ char* ch1 = string;
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;
}
}
如果有人看到根本问题所在,我将非常感谢您的帮助谢谢大家! Change*retChar=ch1;retChar=ch1;例如,当retChar指针未初始化为某个对象时,您正在取消对它的引用,您可能只希望它将ch1指针的值分配给地址,而不是它所指向的字符 以下声明:
*retChar = ch1;
由于试图取消对未初始化指针的引用,导致分段错误;为了避免这种情况,您应该将该语句更改为:
retChar = ch1;
此语句将ch1的地址存储在retChar中,而不是存储在ch1中的char值;这可能就是你想要做的 崩溃发生在*retChar=ch1,因为retChar是未初始化的指针。在命令行上使用-Wall进行编译,编译器应该告诉您类似的事情。你可能是想写retChar=ch1除了崩溃,在我看来,你是在倒退算法,你的外循环应该是字符串字符,内循环结束停止。您不需要所有这些临时变量,当您第一次找到匹配的字符时,您可以立即将指针返回到字符串中的位置。如果你在循环结束时得到,这意味着你没有发现任何好的结果,因此你必须返回NULL。你在运行gdb之前是否在编译时启用了-g标志?你建议的新字符除了泄漏内存之外没有其他用途。@MatteoItalia刚刚编辑了我的文章,对不起,我没有注意到这一点。谢谢你指出这一点!