簡體   English   中英

分段錯誤錯誤11 C ++

[英]Segmentation fault error 11 C++

所以我在代碼的開頭出現了分段錯誤錯誤。 我嘗試在不同的點運行一些測試,錯誤似乎是我為數組分配內存。 我剛剛開始學習堆和堆棧內存,所以我不確定我是否在那里做錯了。 任何幫助,將不勝感激。

#include <iostream>
using namespace std;

//Function Prototypes
void sort(int A[], int n);
int findMin(int A[], int n, int j);
int swap(int& a, int& b);
double median(int A[], int n);
void output1(int median);
void output2(double median);

int main()
{
  int size;
  int array[size]; //Segmentaion fault here
  int i = 0;

  cout << "Enter the size of the list (< 1 to quit): ";
  cin >> size;

  while(size >= 1)
    {
      double element;

      cout << "Enter element " << i+1 << ": ";
      cin >> element;

      array[i] = element;

      i++;

      while(i < size)
    {
      cout << "Enter element " << i+1 << ": ";
      cin >> element;

      array[i] = element;
      i++;
    }

      sort(array, size);
      median(array, size);

       cout << "Enter the size of the list (< 1 to quit): ";
       cin >> size;
    } 
  delete [] array;
  return 0;

}


void sort(int A[], int n)
{
  int min;
  for(int i = 0; i < n; i++)
    {
      min = findMin(A,n,i);
      //min = findMinIndex(p, size, i);

      //if(min )
        swap(A[i],A[min]);
      //swap(p[i],p[min]);
    }
}

int findMin(int A[], int n, int j)
{
  int minIndex = j;
  for(int i = j+1; i < n; i++)
    if(A[i]<A[minIndex])
      minIndex = i;
  return minIndex; 
}

int swap(int& a, int& b)
{
  int temp;
  temp = a;
  a = b;
  b = temp;
}

void output1(int median)
{
  cout << "The median is " << median << "." << endl;
}

void output2(double median)
{
  cout << "The median is " << median << "." << endl;
}


double median(int A[], int n)
{


  if(n % 2 == 0)
    {
      int div1 = n / 2;
      int num1 = A[div1];
      int num2 = A[div1 -1];
      double median = (num1 + num2) / 2;
      output2(median);
    }
  else
    {
      int div2 = n - 1;
      int median = div2 / 2;
      output1(median);
    }
}

因為你沒有初始化size ,所以該變量中的值可以是任何東西。 如果它碰巧過大,比如106,840,406,那么你將無法得到那個大小的int[]

所以基本上,將你的size變量初始化為合理的東西。

必須使用固定大小初始化c ++中的數組。 在您的情況下,size不會初始化為任何固定的整數值,這在c ++中是非法的,並且會導致編譯器產生錯誤消息。

如果您嘗試以下行初始化尺寸大小的陣列之前,你可以告訴尺寸本來就是:

    cout << size << endl;

我用這一行編譯你的代碼並在編譯器失敗之前得到這個int大小:

1995231824(這對於每個編譯器和計算機都不同,但每個數字都會像這個一樣大而無用)

試圖擁有如此大的陣列自然會導致分段錯誤。 這就是為什么你必須將變量大小初始化為固定數字的原因。 這將消除分段錯誤。

分段故障11等於說“索引超出范圍”......

               Index

         0, 1, 2, 3, 4 ,5

值5,6,1,9,8,7

數組長度是6,但它的最后一個索引是5 ..例如,如果我們用6控制一個for循環,那么我們得到了Segmentation Fault 11 ......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM