Программа перестала работать и выдает значение мусора C ++ - PullRequest
0 голосов
/ 01 марта 2020

Я делаю программу для Dynami c Array, где я реализовал три метода. push_back (arguments ...), pop_back (arguments ...) и printArray (arguments ...).

Но когда я увеличиваю размер массива, он дает значение мусора по этому индексу, и если я запустите код для более чем 15 значений, он перестает работать.

#include<iostream>
using namespace std;

void push_back(unsigned int value,unsigned int *array,int &arraySize,int &totalArrayItems ){
  if(arraySize>totalArrayItems){
    array[totalArrayItems]=value;
    totalArrayItems=totalArrayItems+1;
    cout<<"Current size: "<<arraySize<<endl;
  }
  else if(arraySize==totalArrayItems){
      cout<<"Adding the Size of Array... \n";

    unsigned int *tempArray=new unsigned int[arraySize+5];//making new array as asked in requirements
    for(int i=0;i<arraySize;i++){

      tempArray[i]=array[i];
      cout<<"Value in Temp : "<<tempArray[i]<<endl;
    }
    unsigned int *temp=array;
    array=tempArray;
    arraySize=arraySize+5;
    cout<<"Saving "<<value<<" at Position: "<<totalArrayItems<<endl;
    array[totalArrayItems]=value;//adding the new value
    cout<<"Value in Temp "<<totalArrayItems<<" : "<<tempArray[totalArrayItems]<<endl;
    totalArrayItems=totalArrayItems+1;
    cout<<"Updated size: "<<arraySize<<"Current value: "<<value<<endl;
    delete []temp;//delete old array

  }


}
void pop_back(unsigned int *array,int &arraySize,int &totalArrayItems){
  if(totalArrayItems>0){
    totalArrayItems=totalArrayItems-1;
    if(totalArrayItems<(arraySize-5)){
        unsigned int *tempArray=new unsigned int[arraySize-5];
        for(int i=0;i <= totalArrayItems;i++){
          tempArray[i]=array[i];
        }
        unsigned int *temp=array;
        array=tempArray;
        delete[] temp;
        arraySize=arraySize-5;
    }
  }
}
  void printArray(unsigned int *array,int totalArrayItems){
    for(int i=0;i<totalArrayItems;i++){
      cout<<"Value at "<<i<<" : "<<array[i]<<endl;
    }
  }

1 Ответ

0 голосов
/ 01 марта 2020

unsigned int* array в push_back является локальной переменной. Когда вы присваиваете ему новое значение (новый указатель на новую ячейку памяти), оно не обновляет значение array в каком бы методе вы его не вызывали.

Передайте указатель на int* вместо: int**, если вы хотите, чтобы ваши перераспределения оставались неизменными.

...