¿Es seguro usar arreglos de longitud variable?

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

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 creando una matriz de tamaño fijo, y en ese caso también podría usar una matriz de tamaño fijo. Existe una clase oscura de algoritmos recursivos en los que los VLA pueden marcar la diferencia entre no poder resolver el problema (desbordamiento de la stack) y poder, pero en su mayor parte, recomendaría no utilizar los VLA.

Sin embargo, eso no significa que los tipos de VLA sean inútiles. Mientras que VLA es malo / peligroso, los tipos de puntero a VLA son extremadamente útiles. Permiten tener matrices multidimensionales asignadas dinámicamente (a través de malloc ) sin realizar manualmente la aritmética de dimensiones, como en:

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

para obtener una matriz n-by-n direccionable como matrix[i][j] .

    Intereting Posts