2013-11-11 4 views
2

Я читаю целые числа из infile и добавляю их в массив int с помощью указателей.Проблемы с использованием указателей с динамическим массивом

Я прорисовывал код несколько раз, и все, кажется, течет логически, и я не получаю никаких синтаксических ошибок или предупреждений в компиляторе, поэтому я не уверен, что случилось.

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

Теперь мой выход читает все виды винтовых. Я знаю, что это связано с указателями, но сейчас я нахожусь в недоумении.

входной_файл:

3 
456 
593 
94 
58 
8 
5693 
211 

Выход:

The items in the array are as follows. 
7476376, 7475472, -17891602, 17891602, -17891602, -17891602, -17891602, -178916 

collections.h

class collections 
{ 
    public: 
     collections(); 
     void add(int); //adds the value to the array. 
     void print(); //prints item of the array comma separated. 
     ~collections(); 
    protected: 
     int arraySize; 
     int *array; 
}; 

Конструктор:

collections::collections() 
{ 
    arraySize = 1; 
    array = new int[arraySize]; 
}//done 

аннулируются добавить:

void collections::add(int value) //adds the value to the array. 
{ 
    //initial add to master array. 
    if (arraySize == 1) 
    { 
     array[0] = value; 
     arraySize++; 
    } 

    //every other add to master array. 
    else 
    { 
     //temp array. 
     int *tempArray = new int[(arraySize)]; 

     //copies old array into temp array. 
     for (int i = 0; i < arraySize-1; i++) 
     { 
      tempArray[i] = array[i]; 
     } 

     //adds new incoming value to temp array. 
     tempArray[(arraySize-1)] = value; 

     //new master array 
     delete [] array; 
     int *array = new int[arraySize]; 

     //copies temp to master array. 
     for (int j =0; j < arraySize; j++) 
     { 
      array[j] = tempArray[j]; 
     } 

     //cleanup 
     delete [] tempArray; 
     arraySize ++; 
    } 
} //done 

аннулируются печати:

void collections::print() //prints item of the array comma separated. 
{ 
    cout << "The items in the array are as follows.\n"; 
    for (int i = 0; i < arraySize; i++) 
    { 
     cout << array[i] << ", "; 
    } 
}//done 

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

ответ

3

Вы случайно объявили локальную копию array который переопределяет член класса:

//new master array 
delete [] array; 
int *array = new int[arraySize]; 
^^^^^ 

Удалите int * из этой последней строки, а остальное выглядит нормально.

PS: Считаете ли вы использование std::vector<int>?

+0

Это сделало это. Благодарю. Учитель сказал, чтобы не использовать векторы на этом. – Arcath

Смежные вопросы