2011-03-23 17 views

Respuesta

7

Se liberará al final de la función, pero como llama al alloca() dentro del bucle, es probable que se desborde la pila. Si size no cambia dentro de la función, debe llamar al alloca() antes del ciclo.

+0

O use un VLA en lugar de 'alloca'. De hecho, esta es la principal diferencia entre VLA y 'alloca': el alcance de la matriz automática es el alcance de bloque con VLA y el alcance de función con' alloca'. –

4

alloca asigna en la pila y no tiene conocimiento sobre los ámbitos, por lo que se libera después de salir del marco de pila (= después de abandonar la función).

2

La memoria asignada con alloca() se desasigna cuando la función finaliza. Ver por ejemplo el manual page para más información.

En cuanto al primer caso, de solo una autovariable en el alcance, no estoy seguro de cómo definiría que se "libera". No se puede referenciar fuera del alcance que lo define, y si tuviera un inicializador, se reinicializaría en cada iteración.

+0

se libera en un sentido muy exacto. El estándar distingue alcance y vida de una variable. Para VLA, garantiza que el final de su vida útil sea idéntico al final de la ejecución de su alcance. Entonces la memoria que ocupa se libera efectivamente. La expresión de tamaño se calcula en cada iteración y la vida útil solo comienza en ese momento. Por cierto, VLA no tiene permitido tener inicializadores. –

Cuestiones relacionadas