Zwracanie dwuwymiarowej tablicy dynamicznej z funckji

0

Witam,
Mam problem.
Otóż stworzyłem klase, dalem jej kilka metod. dzialaja poprawnie, ale w jednej musialem uzyc tablicy dynamicznej dwuwymiarowej.

Mam teraz problem ze zwroceniem jej.
W jaki sposob moge ja zwrocic?

o to moj kod

void ModelASE::GetVertex(int _VertexNumbers)
{
	/* Tworzenie dynamicznej tablicy dwuwymiarowej w celu zaladowania wspolrzednych wierzcholkow */
	float **Vertex = new float *[_VertexNumbers];
	for (int i = 0; i < _VertexNumbers; ++i) Vertex[i] = new float [3];

	string dane;
	string dane_pom;
	string nazwa("*MESH_VERTEX_LIST");
	float v1,v2,v3;
	string _v1,_v2,_v3;

	int ilosc;

	if(plik.is_open())
	{
		plik.clear();
        plik.seekg(0, std::ios::beg );
		while(!plik.eof())
		{
			getline(plik, dane);
			if(SearchWord(dane, nazwa) != 0)
			{
				break;
			}
		}

		for(int i = 0; i < _VertexNumbers; i++)
		{
				getline(plik, dane);
				string _v1(dane, nazwa.length()+4);
				dane.erase(0, dane.find(" "));
				dane.erase(0, dane.find("\t"));
				dane.erase(0, 1);
				dane.erase(0, dane.find("	")+1);
				string _v2(dane, dane.find(""));
				dane.erase(0, dane.find("	"));
				dane.erase(0, 1);
				string _v3(dane, dane.find(""));
				v1 = atof(_v1.c_str());
				v2 = atof(_v2.c_str());
				v3 = atof(_v3.c_str());
				Vertex[i][0] = v1;
				Vertex[i][1] = v2;
				Vertex[i][2] = v3;
		}
	}
}
0

Odpowiadając na Twoje pytanie:
metoda musiałaby zwracać typ taki jak "Vertex"

float** ModelASE::GetVertex(int _VertexNumbers)

później możesz zwrócić po prostu ten wskaźnik

return Vertex;

Nie zapomnij jednak o zwolnieniu później pamięci.

0

Nie, nie. Inaczej.

Jeden z rozmiarów twojej tablicy jest statyczny więc można uprościć sprawę. Poza tym alokowanie pamięci w jednej funkcji a zwalnianie jej w innej, bliżej niepowiązanej funkcji jest złą praktyką i prowadzi do bólu głowy związanego z trudnością w zarządzaniu pamięcią.

Tak więc przekaż do funkcji tablicę tablic statycznych i to już zaalokowaną:

typedef float Vertex[3];

void ModelASE::GetVertex(Vertex *array, int _VertexNumbers)
{
        for (int i = 0; i < _VertexNumbers; ++i) {
                array[i][0] = costam;
                array[i][1] = costam;
                array[i][2] = costam;
        }
}

//przykład 1
Vertex static_array[size];
GetVertex(static_array, size);
/* ... */

//przykład 2
Vertex *dynamic_array = new Vertex[size];
GetVertex(dynamic_array, size);
/* ... */
delete[] dynamic_array;

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