1

私のプログラムには、グローバル構造体があります。

struct card{
   char* action;
   // and other irrelevant members
   };

各カードをデフォルト値に初期化する関数:

void initializeCard(card* cards){
  char* charPtr;
  (*cards).action = new char[9];
  charPtr = (*cards).action;
  *charPtr = 'a'; 
  charPtr++;
  *charPtr = 'c';
  charPtr++;
  *charPtr = 't';
  charPtr++;
  *charPtr = 'i';
  charPtr++;
  *charPtr = 'o';
  charPtr++;
  *charPtr = 'n';
  charPtr++;
  *charPtr = '\0';   

  // so on for other members
  }

メインでは、シャッフルされていない「カード」のデッキに対して初期化関数が呼び出されます。

card* unshuffled = new card[108];
for(int i=0;i<108;i++, unshuffled++){
   initializeCard(unshuffled);
   }

後で、配列内のカードの「アクション」文字列を、ファイルから取り込まれた文字列で上書きしようとしています (ファイルは有効です。自分で書きました)。入ってくる文字列は最大 8 文字なので、すでに割り当てられているアクション配列に収まります。

  fin >> temp;
  stringCopy((*cards).action, temp); // <---- this is where I get the seg fault

StringCopy は私自身のバージョンである strcpy で、null char まで文字ごとに単純にコピーします。正常に動作することをテストしました。

セグフォルトが発生するのはなぜですか?

また、なぜ私が自分のやり方で物事を行ったのか疑問に思わないでください。私はクラスに対してこれを行っており、動的に割り当てられたメモリを使用する必要があり、独自の文字列ライブラリ関数を作成する必要があり、ベクトル、矢印演算子、またはオーバーロードされた演算子を使用できません。

4

0 に答える 0