Професионална програма
Loading...
+ Нов въпрос
i12805 avatar i12805 3 Точки

Demo 7, getPrecomputedSquareRoots(инт) какво връща функцията?

double* getPrecomputedSquareRoots(int toNumber) {
    double* roots = new double[toNumber + 1];
    for (size_t i = 0; i <= toNumber; i++) {
        roots[i] = sqrt(i);
    }

    return roots;
}

променливата роотс е указател към масив от променливи от типа дабъл, нали така?

какъв е скоупа на този масив? след излизане от функцията накъде ще сочи роотс?

поздрави

Тагове:
0
C++ Advanced
MartinBG avatar MartinBG 2792 Точки

roots е pointer и сочи към адрес в динамичната памет (началото на double масив, т.е. число, напр. със стойност 5000).

Скоупа на roots е в тялото на getPrecomputedSquareRoots функцията, т.е. след приключването ѝ, roots, който се намира в стека, се освобождава, но стойността му (например 5000) се връща като резултат от извикването на функцията и може да се запази в нова променлива и да се използва по-късно.

Скоупа на масива в динамичната памет, към която сочи roots, е глобален за приложението и тя ще бъде освободена автоматично при приключване на програмата (ако имаме memory leak), или ръчно във всеки един момент с delete[] на пойнтъра към масива.

1
04/12/2019 10:02:17
i12805 avatar i12805 3 Точки

Благодаря.

Сега е по-ясно. Но как става ясно, че roots "сочи към адрес в динамичната памет". Операторът new ли ми дава хинт за това?

Поздрав!

0
MartinBG avatar MartinBG 2792 Точки

Да, точно така.

Всичко, което се създава с new се разполага в динамичната памет и е задължително да бъде освободено с delete, когато вече не е необходимо

0