2017-03-09 9 views
2

我的編譯器在Veccreator函數中初始化浮點數組時出現運行時錯誤。我在這裏只是發佈我的代碼樣本的示例。無法使用{0}初始化float數組

#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]; 
     } 
    }