簡體   English   中英

動態數組C ++分配過程中的分段錯誤

[英]Segmentation Fault During Allocation of Dynamic Array C++

不知道我在這里搞砸了。 剛剛學習了如何動態分配數組,現在,我正在嘗試讓用戶分配多個整數,並讓程序查找輸入數字的平均值。 但是,當用戶要讀取新分配的數組中的數字時,我遇到了分段錯誤。 我會出界嗎? 還是我只是不恰當地對待指針? 對您的答案要盡可能苛刻或誠實,我真的只想了解我做錯了什么。

如此之多的循環的原因是,不僅我必須在循環中中斷0,而且每當從函數返回NULL或輸入負數時,我都需要重復迭代。

提前非常感謝您!!

#include <iostream>
using namespace std;

int* allocateArray(int);

int main()
{
   int size;
   int *ptr = NULL;
   double sum = 0;


   cout << "Enter Number of Integers. (Enter 0 to Exit)\n";
   cin >> size;
   while (size != 0)
   {
      do
      {
         do
         {
            while (size < 0)
            {
               cout << "Enter Number of Integers. (Enter 0 to Exit) \n";
               cin >> size;
            }
            ptr = allocateArray(size);

         }
         while (ptr = NULL);

         for (int i = 0; i < size; i++)
         {
            cout << "Enter Number for Integer " << i + 1 << endl;
            cin >> ptr[i];
            //THIS is where it stops. I get a segmentation fault no matter what number 
            //Or how many numbers I enter.
            sum += *(ptr + i);
         }
         cout << "The Average is " << (sum/size) << endl;
         delete [] ptr;
         ptr = NULL;
         sum = 0;


      }
      while (size != 0);
   }


   return 0;
}


//Function meant to practice allocating a dynamic array
int* allocateArray(int size)
{
   int* tmp = NULL;

   if (size < 1)
      return NULL;
   try
   {
      tmp = new int[size];
   } catch(bad_alloc)
   {
      tmp = NULL;
   }
   if (tmp == NULL)
   {
      cout << "Failed to allocate the array!\n";
   }
   return tmp;
}

while (ptr = NULL);替換while (ptr = NULL);

while (ptr == NULL);

比較器和賦值運算符之間的混淆是初學者的常見錯誤。 如果啟用所有警告,則可能會收到警告。

這將為ptr分配NULL並將評估為false並中斷。

 while (ptr = NULL);

 for (int i = 0; i < size; i++)
 {
   cout << "Enter Number for Integer " << i + 1 << endl;
   cin >> ptr[i];
   //THIS is where it stops. I get a segmentation fault no matter what number 
   //Or how many numbers I enter.
   sum += *(ptr + i);
 }

您已在while循環中將“ ptr”設置為NULL。

暫無
暫無

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

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