私は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'は初期化されていないポインタなので、クラッシュは' * retChar = ch1'で発生します。コマンドラインで '-Wall'を使ってコンパイルすると、コンパイラはこのようなことについてあなたに伝えるべきです。 (あなたはおそらく 'retChar = ch1'と書くことになる) –
クラッシュのほかに、アルゴリズムを逆向きにしているように見えます。外側のループは' string'の文字に、内側のループは 'stop'の上になければなりません。これらの一時変数をすべて必要とするわけではありません。マッチした文字を最初に見つけたら、すぐに 'string'のどこにポインタを戻すことができます。ループの終わりになると、何も見つからないことを意味するので、NULLを返す必要があります。 –
gdbを実行する前に-gフラグを付けてコンパイルしていますか? –