2017-03-09 52 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]; 
     } 
    }