Jak do obiektu wpisać trzy zmienne?

0

Witam mam taki problem mam strukture która mam w sobie char i dwa inty i nie wiem jak do 2 obiektu wpisać te zmienne.

#include <iostream>
#include <string>
#include <cstdio>

struct points {
    char * letter = new char;
    int *A = new int;
    int *B = new int;

    ~points() {
        delete letter;
        delete A;
        delete B;
    }
};

void comparison (points tabPoints[] , int size , points tabSecondary[]);

int main()
{
    int step = 0;
    int howManyPoints = 0;
    int index = 0;
    std::cin >> step >> howManyPoints;
    int sizeTab = howManyPoints;

    points * tabPoints      =   new points [howManyPoints];
    points * tabSecondary   =   new points ;
    points * tabSort        =   new points [howManyPoints];

    while (step != 0) {
        while (howManyPoints != 0) {
            std::cin >> *tabPoints[index].letter >> *tabPoints[index].A >> *tabPoints[index].B;
            ++index;
            --howManyPoints;
        }

        --step;
    }
    comparison (tabPoints, sizeTab, tabSecondary);

    delete [] tabPoints;
    return 0;
}
void comparison (points tabPoints[] , int size , points tabSecondary[]) {
    for (int i = 0 ; i < size ; ) {
//        points tab = *(tabPoints[i].letter);  Chodzi mi o ten obiekt chce jeszcze dopisać tabPoints[i].A i tabPoints[i].B
    }
}
 

Takie coś też nie podziałało

 for (int i = 0 ; i < size ; ) {
        points tab = {
            *tabPoints[i].letter,    
        };
    }

=======================================================================================
Już sobie poradziłem tak jest odpowiedz:

points tabMin, tabTemp;
        tabMin.letter  = tabPoints[i].letter;
        tabMin.A       = tabPoints[i].A;
        tabMin.B       = tabPoints[i].B; 
1

Rozumiem, że ćwiczysz wskaźniki, ale nie tędy droga. Wskaźników tak się nie używa, piszesz jakieś dziwny i niepoprawny kod, którego nikt normalnie by nie pisał.

tabMin.letter  = tabPoints[i].letter;

letter to wskaźnik, czyli tutaj jedyne co robisz to wskazać tabMin.letter na ten sam obszar pamięci co tabPoints[i].letter. To pociąga za sobą 3 poważne błędy:

  1. Ten obszar pamięci wskazywany wcześniej przez tabMin.letter nie został zwolniony i już nie masz niczego co by na niego wskazywało - wyciek pamięci.
  2. tabMin.letter i tabPoints[i].letter wskazują na ten sam obiekt, czyli zmiana wartości tego obiektu poprzez jeden wskaźnik powoduje, że drugi również zobaczy zmiany.
  3. Destruktory tabMin i tabPoints[i] będą próbowały zwolnić ten sam obszar pamięci dwukrotnie - UB.

Analogicznie z pozostałymi wskaźnikami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1