Problem z wysłaniem struktury do funkcji za pomocą wskaźnika

0

Moi drodzy,
wpisałem sobie przed chwilą kilka linijek kodu które wedle mojego planu miały mi wprowadzać wartości do pewnej zmiennej typu struct. Wszystko działa sprawnie ale.... do czasu wprowadzania któregokolwiek z parametrów trzeciej prostej. po wprowadzeniu wywala mi błąd, tak jakby źle była zarezerwowana pamięć dla zmiennej typu "prosta". Czy jakaś mądra głowa mogłaby zerknąć na poniższy kod i napisać WTF? :-)


#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

struct prosta
{
  int a;
  int b;
};
class okrag
{
  int x;
  int y;
  int r;
};
void wprwart(prosta *pr[])
{
    for(int i=0;i<=4;i++)                                                           // w tej pętli gdy i==2 wiersz polecen wywala mi błąd
    {
        cout<<"Wprowadz parametr a "<<i+1<<" prostej ";
        cin>>pr[i]->a;
        cout<<"\nWprowadz parametr b "<<i+1<<" prostej ";
        cin>>pr[i]->b;                                                                
        cout<<endl;
        system("CLS");
    }
}

int main()
{
    prosta *prost = new prosta[5];
    wprwart(&prost);
    cout<<prost[0].a;
    return 0;
}


 
0

void wprwart(prosta pr[])

wprwart(prost);
1
*pr[]

to wskaźnik do tablicy, czyli wskaźnik do wskaźnika, czyli **pr.
W programie głównym masz pojedyczny wskaźnik

prosta *prost = new prosta[5];

Niby w wywołaniu funkcji podajesz adres do wskaźnika i funkcja to "łyka"

wprwart(&prost);

Ale w funkcji:

wprwart(prosta *pr[])

już jest:

pr[i]->a; 

Czyli zmieniając 'i' iterujesz po kolejnych wskaźnikach do tablic, a nie po elementach tablicy.
Program wywala się nie dla i==2, tylko już dla i==1 (Ty wypisujesz na ekran i+1), bo właśnie próbuje pisać do składowej pierwszego elementu DRUGIEJ tablicy.

0

Dzięki Panowie za odpowiedzi, a w szczególności Tobie Romek za opis problemu.
Pozdrawiam!

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