0

私はしばらくこれに固執しており、このEXC_BAD_ACCESSエラーをデバッグできません。私はNSZombieを実行しましたが、それがメモリの問題であると確信していますargv[1](またはそれ以上のもの)。構文とライブラリをチェックしたので、過去に保存しない理由がわかりませんarg[0]

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int main(int argc, char* argv[])
{
    cout << "Enter the initial bankroll" << endl;
    int bankroll = atoi(argv[1]); //code faults here

    cout << "Enter seed" << endl;
    int seed = atoi(argv[2]);

    // ...

エラーが何よりも先に発生するため、残りは省略しました。

コードはターミナルで実行されますが、クラスの自動採点に失敗します。

入力された引数:

./ブラックジャック 400 1

任意の数値で機能するはずです。

最初の数字と2 番目の数字はブラックジャックではないargv[0]でしょうか。argv[1]argv[2]

4

2 に答える 2

5

cout の要素を埋めませんargv。これらは、プログラムの実行に使用されるコマンド ラインから取得されます。また、 を使用するときはいつでも、 への有効なインデックスの数である をargv必ず確認してください。プログラムに引数を渡しておらず、 の要素が使用できないため、プログラムがクラッシュしている可能性があります。argcargvargv

期待どおりのユーザー入力を読み取るために呼び出しを使用するcinか、コマンドラインから渡された値を使用するようにプログラムを変更する必要があります。つまり、プロンプトや読み取りはありません。

追加された仮定はargv、 :./blackjack 400 1でプログラムを実行する場合、 でargv[1]ある必要があり400、 でargv[2]ある必要があります1

あなたの編集に基づいて、コマンドラインからこれらの番号を取得したいようですので、cout呼び出しを削除してください。

于 2012-08-06T21:45:34.120 に答える
0

他の人が指摘しているように、argv はコマンドライン引数です。それらが満たされている場合は、それらを使用してください。私はよく次のようにします。

int
main(int n_app_args, char** app_arg)
{
  std::string nec_file;
  if (n_app_args > 1)
    nec_file = app_arg[1];
  else
  {
    std::cout << "Enter NEC output file: ";
    std::cin >> nec_file;
  }

コマンドライン引数を忘れると、プログラムが尋ねてきます。引数を覚えていれば、それ以上の介入なしに引数が使用されます。明らかに、これをより多くの引数に拡張できます。

于 2012-08-06T22:01:00.190 に答える