Wskaźnik w argumencie funkcji

0

Witam, dodaje wskaźnik do argumentu funkcji a następnie allokuje jakieś dane na które ma ten wskaźnik wskazywać. Wygląda to w skróceniu tak:


int parse(std::string line, char *moves)
{
	int value = line.size();
	moves = new char[value];
	return value;
}

int main()
{
	char *moves;

	int size = parse(line[0], moves);

	for(int i = 0; i < size; i++)
		std::cout << moves[i] << " ";

	delete[] moves;

	return 0;
}

The varible 'moves' is being used without being initialized

0

Kompilator daje po prostu podpowiedź, że ta zmienna może być używana jako niezainicjalizowana, choć akurat w tym wypadku się tak nie dzieje, bo alokujesz jej miejsce w pamięci wewnątrz funkcji.

0

Yhym, a jak się pozbyć tego błędu ? :)

#edit, jak się pozbyć "tego"

0

Spróbuj tak:

int parse(std::string line, char* &moves)
0

Działa :)

0

choć akurat w tym wypadku się tak nie dzieje, bo alokujesz jej miejsce w pamięci wewnątrz funkcji.

Alokuje, ale nie jej, tylko kopii, która została stworzona w chwili wywołania funkcji i zostanie zniszczona w momencie wyjścia z niej. Dodatkowo powodując wyciek pamięci. Rozwiązanie z referencją jest już poprawne, bo operujemy już bezpośrednio na przekazanym argumencie.

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