当我运行简单的数组编码时,当我输入第7个数字时会出现访问冲突(分段错误)错误。 如何克服这个问题?
<div id="example">
<div id="kendoGrid"
data-role="grid"
data-pageable=" true"
data-sortable=" true"
data-filterable="true"
data-toolbar="['create','save', 'cancel']"
data-editable="inline"
data-columns="[
{ 'field': 'Id', 'width': 100 },
{ 'field': 'CurrentCurrencyCode', 'width': 100 },
{ 'field': 'ShortName', 'width': 100 },
{ 'field': 'FullName', 'width': 100 },
{ 'field': 'ContactPerson', 'width': 100 },
{ 'field': 'Address1', 'width': 100 },
{ 'field': 'CompanyCity', 'width': 100 },
{ 'field': 'CompanyState', 'width': 100 },
{ 'field': 'CompanyCountry', 'width': 100 },
{ 'field': 'ZipPostCode', 'width': 100 },
{ 'field': 'TelArea', 'width': 100 },
{ command: ['edit'], title: 'Actions', width: '250px' },
]"
data-bind="source: products"
style=" height :500px"></div>
</div>
<div>
</div>
答案 0 :(得分:2)
没有方面
int main() {
int size = 0;
double temp[size];
是有效的C ++。如果您的编译器对其进行编译,则无法根据C ++语言标准预测生成的程序的外观或行为方式。数组(严格来说:完整数组类型)必须具有由常量表达式给出的严格正限制。
答案 1 :(得分:2)
正如其他注释所解释的那样tmp[]
的大小为0,因为它是用非常量表达式size
初始化的。然后在访问数组边界外的内存时发生segfault(c ++不验证数组边界)。
为什么你还需要这个阵列?您可以重新分配变量...
int main()
{
int size = 0;
double temp;
double sum = 0;
double avg;
cout<<"Enter how many number would you like to type: ";
cin>>size;
for (int i=0; i < size; ++i )
{
cout<<endl<<"Number "<< i + 1<<": ";
cin>>temp;
sum=sum+temp;
}
或者您应该使用vector<double> tmp
它可以在运行时调整其大小...
答案 2 :(得分:0)
当你分配这样的数组时,它的大小是固定的,必须在编译时知道。通常,您不能使用变量作为大小,但在这种情况下,由于size
在紧接之前使用常量表达式初始化,因此在编译时它的值 已知。编译器实际上用double temp[size]
替换double temp[0]
(这里的警告可能很好)。显然,当您尝试访问其元素时,(固定)大小为0的数组不会表现得很好。
答案 3 :(得分:0)
您正在尝试动态分配数组大小并且您的方法不正确,当您尝试从内存中访问无效地址时会发生分段错误,这意味着数组的位置不存在。我希望这能解决你的问题:
#include <iostream>
using namespace std;
int main()
{
int size;
int sum = 0;
float avg;
std::cout << "Number of elements you want to input: ";
std::cin >> size;
int *array = new int[size]; //assign array size dynamically
for (int i = 0; i < size; i++) //find sum
{
std::cout << "Input val " << i << ": ";
std::cin >> array[i];
sum = sum + array[i];
}
avg = sum / size; //cal avg
cout <<endl<< "Sum: " << sum << endl; //display
cout << "Avg: " << avg << endl;
delete [] array; //free memory
return 0;
}