ďťż

Ładny brzuch

Mam problem z programem, a mianowicie z dynamicznymi tablicami. Wiem jak sie nimi poslugiwac, ale niedawno chcialem napisac program który, ma:

1. 3 tablice typu int 20 el.
2. funkcje, ktora mnozy i element tablicy drugiej i pierwszej i wstawia wynik do i elementu tablicy trzeciej.

Nie miałem z tym większych problemów:

#include <iostream> using namespace std; void mnozenie(int *wsk_tabl_1, int *wsk_tabl_2, int *wsk_tabl_3) { for(int i = 0; i < 20; i++) { *(wsk_tabl_3++) = (*(wsk_tabl_1++)) * (*(wsk_tabl_2++)); } } int main() { int *wsk1 = new int[20]; int *wsk2 = new int[20]; int *wsk3 = new int[20]; for(int i = 0; i < 20; i++) { wsk1[i] = i; wsk2[i] = i; } mnozenie(wsk1, wsk2, wsk3); for(int i = 0; i < 20; i++) { cout << wsk1[i] << "\t" << wsk2[i] << "\t" << wsk3[i] << "\n"; } delete [] wsk1; delete [] wsk2; delete [] wsk3; }

Jednak kiedy zamieniam pętlę wyświetlającą te 3 tablice na:

for(int i = 0; i < 20; i++) { cout << *(wsk1++) << "\t" << *(wsk2++) << "\t" << *(wsk3++) << "\n"; }

Mam wtedy taki komunikat (visual 2008 express):

--------> http://img205.images...5267/errorl.jpg

Dlaczego tak się dzieje ?
Użytkownik rbercik953 edytował ten post 03 marzec 2009, 20:02


Nie możesz używać ++ na tych wskaźnikach, bo zmieniasz ich wartości. "delete" wymaga adresu pierwszego elementu tablicy ("delete" musi dostać dokładnie ten sam adres, który zwrócił "new"). Możesz "delete [] (wsk1 - 20);", ale przyznasz sam, że nie jest to zbyt sensowne ;) Oba poniższe zadziałają, ale polecam pierwszy:

for(int *i = wsk1, *j = wsk2, *k = wsk3; i != wsk1 + 20; i++, j++, k++) { cout << (*i) << "\t" << (*j) << "\t" << (*k) << "\n"; }
for(int i = 0; i < 20; i++) { cout << *(wsk1 + i) << "\t" << *(wsk2 + i) << "\t" << *(wsk3 + i) << "\n"; }

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •