0

配列にそれらのインデックスが要素として含まれている場合、インデックスのセットの要素を 1 に設定しようとしています。配列サイズは 20、つまりインデックス 0 から 19 です

例えば ​​-

 int myArray[5] = {1,4,2}; //user input or statically defined in driver(main)
 int set[] = {0,1,1,0,1}; //successfully set in constructor
 IntegerSet intObj(set);//At a point, program stops execution. Any idea why?

ここに部分的なコードがあります

    //integerset.h 

    class IntegerSet{
          public :
              IntegerSet( int [] );
              .....
          private :
              int set[20];            
    };

  //integerset.cpp (header files included)

  IntegerSet :: IntegerSet( int arr[]){
       for(int i = 0; i <20; i++) //works fine (printed "test" in loop)
               set[i] = 0; //if not this then garbage elems set
       for ( int i = 0; arr[i] != '\0' ; i++ ) //works fine. (printed "test" in loop)
          set [arr[i]] = 1;        
       for ( int i = 0; i < 20; i++ ) //program stops execution here
           cout<<i<<"\t"<<set[i]<<"\n"; //tried to print "test" in loop,program crashed
  }

  //main.cpp (header files included)


int main(){
             int a[] = {1,3,0,12,14,15,'\0'}; // premature end??
             IntegerSet obj2(a);
             system("pause");
             return 0;
   }
4

2 に答える 2

1

ではarr[i] != '\0'、配列にヌル ターミネータがないため、ループが継続し、インデックス要素が配列の末尾を通過します。

std::arrayまたはを使用することをお勧めしますstd::vector。別のオプションは、コードを次のように修正することです。

template <int N>
IntegerSet :: IntegerSet(int (&arr) [N]) : set() {
       for (int i = 0; i < N ; i++)
          set [arr[i]] = 1;        
       for (int i = 0; i < 20; i++)
           cout<<i<<"\t"<<set[i]<<"\n";
  }
}
于 2013-05-24T03:54:42.517 に答える
0

配列を名前付きのパラメーターとして関数に解析すると、配列の最初の要素のアドレスが参照されます。したがって、あなたの場合、 a は int * のタイプです。したがって、コンストラクターパラメーターを int * として変更する必要があります

于 2013-05-24T03:55:29.280 に答える