Dynamiczna tablica wskaźników - przestawienie jednego wskaźnika przestawia wszystkie

0

Witam!

Problem następujący: mam tablicę dynamiczną wskaźników na pojedyncze inty (więc nie dwuwymiarową). Zastanawia mnie, dlaczego, kiedy chcę przestawić jeden ze wskaźników z tej tablicy na inny adres, przestawiają się wszystkie...

Kod:

void main()
{
	int** newnewTables = new int*[5];
	
	int k = 55;
	newnewTables[0] = &k;
}
0

Może nieprawda. Tylko dziwne, że jak ustawię każdy wskaźnik na jakiś inny (każdy na różny), np. mam 5 innych pokazujących na 1, 2, 3, 4, 5. To potem, jak w forze wypisuję zawartość:

for (int i = 0; i < 5; i++)
{
     cout << *newnewTables[i] << endl;
}

to uzyskuję piękną kolumnę piątek... :/

Edit:
A jak w debuggerze podglądam zawartość tablicy newnewTables na bieżąco, w momencie ustawiania jej wskaźników, to za każdym ustawieniem zmieniają się właśnie wszystkie.

0

Dokładnie to to co wkleiłem to teren eksperymentalny, który już skasowałem (uproszczona wersja tego, z czym teraz walczę). A wersja pełna jest tu:

	Vec** newTables = new Vec*[k + 1];

	int i = 0;
	for (; i < index; i++)
	{
		newTables[i] = &Vec(*tables[i]); //TODO: UWAGA 2
	}

Vec jest klasą reprezentującą wektor. tables jest tablicą (polem klasy Vec) analogiczną do newTables (Vec**). Klasa Vec ma konstruktor kopiujący, którego tutaj używa, by nowy wektor wstawić do newTables (i potem móc zwolnić pamięć z tables i zastąpić nią za pomocą newTables.

PS. A, no i k to dotychczasowa liczba wskaźników na wektory w tablicy.

0

pokaż jak zdefiniowałeś operator() w klasie Vec oraz wszystkie pola tej klasy które w tej metodzie używasz. przeanalizuj sobie przykładzik:

#include <stdio.h>

int main()
{
  int a=3,b=2,c=1;
  int** tab = new int*[3];
  tab[0] = &a;
  tab[1] = &b;
  tab[2] = &c;
  for (int i=0; i<3; i++)
    {
      printf("*tab[%d]=%d\n",i,*tab[i]);
    }

  delete [] tab;
  return 0;
}

może operator() w klasie vec nie zwraca u Ciebie referencji tylko kopie zmiennej

0

Dobra, już nieistotne. Znalazłem trochę inny sposób na zrobienie tego i działa.

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