定期的に実行しているときにsegfaultを生成するのはなぜですか?cpy
関数を呼び出すときにコマンドライン引数を追加するかコメントアウトすると、segfaultの代わりに未定義の動作ですか?私はn
知っポインタのsegfaultと未定義の動作
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
int *p;
void fn() {
int n[1];
n[0]=99;
p = n;
}
void cpy(char *v) {
char x[8];
strncpy(x,v,8);
}
int main(int argc, char** argv) {
fn();
cpy(argv[1]);
cout << "p[0]:" << p[0];
}
が機能fn
のローカルVARですが、私はバッファをオーバーフローか、n
はそれがどこから開催されている値を印刷してもらうことargv[1]
として何かを入力することができる方法がある/でしたメモリに?
未定義の動作ですか?コマンドライン引数を追加すると、argv [1]に格納されます。 cpy()行をコメントアウトすると、どこにいてもargv [1]が使用されていないので、segfaultの原因になります。 – Matt
しかし、なぜ 'argv [1]'を使用してsegfaultが発生しないのですか?私はスコープ変数の範囲を指している 'p'のインデックスを出力する未定義の動作を意味しました。 – Austin
cmdlineのargを指定しないか、変数argv [1]を使用しないのと同じように待機しますか? – Matt