我的细分错误发生在哪里?

时间:2017-03-14 22:43:51

标签: c segmentation-fault gdb

我对C很新,所以如果这是一个愚蠢的问题我会道歉。我收到了一个分段错误,当我运行gdb时,我没有得到一个行号来说明导致错误的原因,就像我通常那样。相反,我得到的结论是:

  find_any_ptr()

中的

0x00000000004012ff

我正在编写一个方法来返回指向给定stopstring中任何字符第一次出现的指针,如果NULL不包含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; } } 任何人物。

insert

如果有人知道潜在问题在哪里,我将非常感谢您的帮助。 :)谢谢!

2 个答案:

答案 0 :(得分:1)

*retChar = ch1;更改为retChar = ch1;即。当你的retChar指针没有被初始化为某个东西时你正在取消引用它,你可能只是希望它指定ch1指针的值(该地址不是它指向的char)。

答案 1 :(得分:0)

以下声明:

*retChar = ch1;

导致分段错误,因为您尝试取消引用未初始化的指针;要避免这种情况,您应该将该语句更改为:

retChar = ch1;

此语句将ch1的地址存储在retChar中,而不是存储在char中的ch1值;这可能是你想要做的。