-1

したがって、ユーザーからコマンドライン引数を受け取り、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を使用しています。

4

1 に答える 1

0

の宣言はどこにありますatoiか? がなければ#include <stdlib.h>、何もないと思います。

argc > 1argv[1] を使用する前に確認することもできます。

于 2013-02-20T05:08:17.683 に答える