したがって、ユーザーからコマンドライン引数を受け取り、atoiを使用してそれを数値に変換するプログラムがあります。コマンド ラインから渡される数値が 2048 を超えるまで、すべて正常に動作します。
簡単なプログラムは次のとおりです。
int no_of_elements_per_thread = 0;
int main(int argc, char* argv[])
{
int status;
void* thread_arg;
void* res;
int i = 0;
//initialize
no_of_elements_per_thread = atoi(argv[1]);
return 0;
}
さまざまな値に対してプログラムを実行すると、出力は次のようになります。
[adeb1][open-19][~/pre2] ./pre2 2098
Segmentation fault
値が小さい場合:
[adeb1][open-19][~/pre2] ./pre2 210
[adeb1][open-19][~/pre2]
興味深いことに、atoi を実行せずに %s で printf を実行しようとすると、argv[1] でも同様にセグメンテーション違反が発生します。したがって、argv[1] は 2048 を超える値で問題を引き起こしているようです。
問題があれば、Linuxでgccを使用しています。