C++ Вернуть указатель на массив из фн
Задача: нужно распарсить строку в формате "число;число;число;..." в обычный массив чисел.
Проблема, при попытке вернуть указатель, я так предполагаю, схлопывается область видимости, и данные превращаются в мусор,
Вопрос как правильно вернуть указатель, чтобы данные сохранились?
Вот код парсинга.
P.S - Сам код работает верно, пробегал в дебаге, на строчке с return, arr имеет нужные мне данные
int* SplitAndParseDigits(string digits)
{
int digitsCount = GetCountOfDigits(digits);
int* arr = (int*)calloc(sizeof(int), digitsCount);
string digitsymbols = "";
int arrPtr = 0;
for (int i = 0; i < strlen(digits.c_str()); i++)
{
if (digits[i] != ';')
digitsymbols += digits[i];
else
{
int parseResult =atoi(digitsymbols.c_str());
arr[arrPtr] = parseResult;
arr++;
cout << parseResult;
digitsymbols = "";
}
}
return arr;
}
Ответы (1 шт):
в calloc неправильный параметры. первым аргументом должно быть количество, вторым размер. но это вроде не проблема и всё нормально будет.
вся проблема в arr. вы наверно хотели использовать arrPtr как индекс, но после arr[arrPtr] = parseResult вы увеличиваете сам указатель, а не индекс. ну то есть вы конечно же индекс увеличиваете, но потом передаете этот индекс в return. в else поменяйте так. вместо arr++ укажите arrPtr++. и тогда будет возвращаться начало массива из функции.