访问冲突(分段错误)错误

时间:2015-05-27 08:44:57

标签: c++

当我运行简单的数组编码时,当我输入第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>

4 个答案:

答案 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;
}