2017-03-09 31 views
2

Veccreator関数でフロート配列を初期化すると、コンパイラが実行時エラーを発生します。私は私のコードがどのように見えるかのサンプルを投稿しています。フロート配列を{0}で初期化できません

#include<iostream> 

using namespace std; 
#define SIZE 1000 
class Vector 
{ 
private: 
    float vecarray[SIZE]; 
public: 
    void VecCreator(int dimension) 
    { 
     vecarray[SIZE]= { 0 }; 
     cout << "Enter " << dimension << " digits" << endl; 
     for (int i = 0; i < dimension; i++) 
     { 
      cin >> vecarray[i]; 
     } 
    } 


}; 
int main(void) { 
    Vector obh; 
    obh.VecCreator(2); 
} 

しかし、それはこれで正常に動作します:最初のコードがエラーを与えている理由を教えてください `

#include<iostream> 

using namespace std; 
#define SIZE 1000 
class Vector 
{ 
private: 
    float vecarray[SIZE]= {0}; 
public: 
    void VecCreator(int dimension) 
    { 
     cout << "Enter " << dimension << " digits" << endl; 
     for (int i = 0; i < dimension; i++) 
     { 
      cin >> vecarray[i]; 
     } 
    } 


}; 
int main(void) { 
    Vector obh; 
    obh.VecCreator(2); 
} 

。ここでは第二の答えで

+0

*コンストラクタの初期化子リスト*を検索して読み込みます。 –

+0

人々があなたの質問に答えるのを手助けするためには、エラーについてより具体的に説明する必要があります。あなたの[mcve]から得た正確なエラーを組み込むためにあなたの投稿を編集してください(できれば、コピー+貼り付けを使用して転写エラーを避ける)。 –

+0

これはバッファオーバーランです。 Cでは、配列インデックスはゼロベースです。 'vecarray [SIZE] = 0'という式は、配列の最後のインデックス(SIZE-1)を超えた値を割り当てます。 –

答えて

0

ルック: https://social.msdn.microsoft.com/Forums/vstudio/en-US/14e7318e-6fff-4d68-a823-9cbe7b7bc20a/debugging-runtime-check-failure-2-stack-around-the-variable-loggerthread-was-corrupted?forum=vcgeneral

理由を以下のように、ここでそれをしませんか?私はそこに値を入れたいのですが、なぜ最初にそこに0を入れたのですか?

private: 
    float vecarray[SIZE]; 
public: 
    void VecCreator(int dimension) 
    { 
     cout << "Enter " << dimension << " digits" << endl; 
     for (int i = 0; i < dimension; i++) 
     { 
      cin >> vecarray[i]; 
     } 
    } 
関連する問題