申し訳ありませんが、コードを特定することはできませんが、私が見ている問題は異常です。文字列の値は、他の無関係なコードに応じて変更されているようです。たとえば、以下で渡される引数の値は、fprintf()呼び出しの1つまたは2つをコメントアウトするかどうかに応じて変更されます。最後のfprintf()までに、値は通常完全に空になります(いいえ、引数を直接変更していないことを確認しました... fprintf()をコメントアウトするか、別のfprintf()を追加するだけです。文字列の値は特定の時点で変更されます!):
static process_args(char *arg) {
/* debug */
fprintf(stderr, "Function arg is %s\n", arg);
...do a bunch of stuff including call another function that uses alloc()...
/* debug */
fprintf(stderr, "Function arg is now %s\n", arg);
}
int main(int argc, char *argv[]) {
char *my_arg;
... do a bunch of stuff ...
/* just to show you it's nothing to do with the argv array */
my_string = strdup(argv[1]);
/* debug */
fprintf(stderr, "Argument 1 is %s\n", my_string);
process_args(my_string);
}
周りにはもっと多くのコードがあるので、誰かに私のプログラムをデバッグするように頼むことはできません-私が知りたいのは、このような文字列が無関係のコードに基づいてメモリを変更または上書きする理由をデバッグする方法です。私の記憶は限られていますか?スタックが小さすぎますか?どうすればわかりますか?問題を追跡するために他に何ができますか?私のプログラムは巨大ではありません。1000行のコードがgiveまたはtakeし、動的にリンクされた外部ライブラリが2つあるようなものですが、異常なことは何もありません。
ヘルプ!TIA!