Po próbie użycia wskaźników (których właśnie się uczę) program wychodzi poza określone normy

0

Witam, program poniżej działał dobrze do czasu aż zacząłem swoje karkołomne pierwsze próby użycia znaczników. Ogólnie nakierowuje się na komórki spoza wyznaczonych obszarów i nie mam pojęcia czemu ponieważ powinny być limitowane stałą Max = 5, która w funkcji fill_array() jest nazwana limit.
Program z zasady ma wczytywać wartości podane przez użytkownika funkcją fill, wyświetlić funkcją show, zmienić ich wartosc podanym mnoznikiem funkcją revalue i znów wyświetlić po zmianie.

Z góry dziękuję także za wszelkie uwagi dot. wskaźników :) Przerobiłem ten temat w książkach i Praty i Grębosza + filmik Zelenta na YT, a dalej nie czuje bym umiał ich używać :/

#include <iostream>

using namespace std;
const int Max = 5;

int * fill_array(double *ar, const int limit);
void show_array(const double *ar, int *n);
void revalue(double r, double *ar, int *n);

int main()
{
    double properties[Max];
    int * wsk;
    wsk = fill_array(properties, Max);
    show_array(properties, wsk);
    if (*wsk > 0)
    {
        cout << "Podaj mnoznik zmiany wartosci: ";
        double factor;
        while (!(cin >> factor))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Niepoprawna wartosc, podaj liczbe!";
        };
    revalue(factor, properties, wsk);
    show_array(properties, wsk);

    }
    cout << "Gotowe!\n" << endl;
    cin.get();
    return 0;
}


int *fill_array(double *ar, const int limit)
{
    double temp;
    int wart;
    int *wartosc;
    wartosc = &wart;
    for (wart=0; wart<limit; wart++)
    {
        cout << "Podaj wartosc nr " << *wartosc+1 << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanie przerwane\n";
            break;
        }
        else if (temp < 0)
            break;
        ar[*wartosc] = temp;
    }
    return wartosc;
}

void show_array(const double *ar, int *n)
{
    for (int i = 0; i < *n; i++)
    {
        cout << "Nieruchomosc nr " << i+1 << ": " << *(ar + i) << endl;
    }
    return;
}

void revalue(double r, double *ar, int *n)
{
    for (int i = 0; i < *n; i++)
    {
        *(ar + i) *= r;
    }
    return;
}
0

Bo zwracasz wskaźnik int *wartosc; na zmienną lokalną int wart, która zostaje zniszczona w chwili opuszczenia funkcji. Żeby zwrócić adres zmiennej z funkcji,
musisz skorzystać z dynamicznej alokacji pamięci.

0
YooSy napisał(a):

Bo zwracasz wskaźnik int *wartosc; na zmienną lokalną int wart, która zostaje zniszczona w chwili opuszczenia funkcji. Żeby zwrócić adres zmiennej z funkcji,
musisz skorzystać z dynamicznej alokacji pamięci.

Dzięki - zaraz spróbuję :)

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