2015-11-15 4 views
0

Ниже у меня есть собственный конструктор, который принимает массив, размер массива и имя набора в соответствии со спецификациями моих инструкторов. Однако, когда я запускаю эту программу, я получаю дамп ядра сегментации. Здесь используется элемент данных (int * set), а psize - физический размер массива. Как я могу это исправить?Передача динамически распределенного массива через конструктор

//custom constructor 
Set::Set(int array[] , int size, char name){ 

     set = new int[size]; 

     psize = (size > 0 ? size: DEFAULTSIZE); 
     numOfElements = size; 

     set = array; 

     if (!set){ 
       cout << "Cannot Allocate Memory, exiting program... " << endl; 
       exit(1); 
     } 

     Set::name = name; 
} 

ostream &operator<<(ostream &out, const Set &s){ 

    cout << "The Elements of your set are: " << endl; 
    cout << "{" ; 
    for (int i = 0; i < s.numOfElements; i++){ 
      out << s.set[i]; 
      if (i < s.numOfElements - 1){ 
        out << ','; 
      } 
    } 
    cout << "}" << endl; 
    cout << "Number of Elements is " << s.getNumOfElements() << endl; 
} 

int main(){ 
     int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
     int arr2[3] = {2, 4, 11}; 

     Set A(arr1, 10, 'A'); 
     Set B(arr2, 3, 'B'); 
     cout << A; 
     cout << B; 

     /*Set C; 
     cin >> C; 
     cout << C; 

     Set D(A); 

     cout << D; 

     Set E = A + C; 
     cout << E; 
*/ 
} 
+0

Опубликовать полный пример. прежде чем публиковать его, уменьшите его до минимума и убедитесь, что он все еще компилирует и иллюстрирует проблему. –

+0

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

+0

Откат последнего изменения, так как он значительно изменил код после того, как был отправлен ответ. @ChynnaHernandez: Пожалуйста, не делайте этого. Вы можете изменить вопрос, но, пожалуйста, не изменяйте его после ответов. –

ответ

0

, если set объявлен как int * set, тогда было бы лучше сначала выделить память/клонировать ее, прежде чем вы ее сможете.

set = new int[size]; 

Затем вы можете Асесс его в перегруженный оператор < <.

s.set[i]; 
+0

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

+0

, если вы закомментируете эту строку, он отлично работает правильно? // out << s.set [i]; – basav

+0

Если я прокомментирую эту строку, я не смогу увидеть, будет ли это работать. Моя программа компилируется в любом случае, но я не смогу ее увидеть, если я ее прокомментирую. Имеет ли это смысл? –

0

В конструкторе вы храните размер в psize (дважды), но в вашем operator<< вы ссылаетесь numOfElements, который неинициализированным и поэтому мусор в нем.

+0

Спасибо за вашу помощь, я очень ценю это. Я запустил программу, и на этот раз правильно отобразился набор, но затем он отобразил карту памяти и ядро ​​сбрасывал, я разместил отредактированную версию. –

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