Pregunta

Tengo una preocupación por las matrices de longitud variable. Cuando quiera asignar una matriz dinámicamente, me pondré nulo, si no es posible asignar suficiente memoria y puedo responder a esto correctamente en mi programa. Con una matriz de longitud variable no obtengo esta información. ¿Qué debo hacer con esto?

¿Fue útil?

Solución

Tienes razón en que los VLA son básicamente inseguros. La única excepción es que si se asegura de que nunca los haga más grandes que un tamaño, se sentiría seguro haciendo una matriz de tamaño fijo, y en ese caso también podría usar una matriz de tamaño fijo. Hay una clase oscura de algoritmos recursivos en los que VLA podría marcar la diferencia entre no poder resolver el problema (desbordamiento de pila) y poder, pero en su mayor parte, recomendaría nunca usar VLA.

Sin embargo, eso no significa que los tipos de VLA son inútiles. Mientras que VLA es malo/peligroso, puntero a vla Los tipos son extremadamente útiles. Hacen posible que se asignen dinámicamente (a través de malloc) matrices multidimensionales sin hacer la aritmética de la dimensión manualmente, como en:

size_t n;
double (*matrix)[n] = malloc(n * sizeof *matrix);

Para obtener una matriz N-by-N direccionable como matrix[i][j].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top