Pregunta de C

Diego Caro diegocaro en gmail.com
Mar Mayo 9 21:43:35 CLT 2006


On 5/9/06, Alvaro Herrera <alvherre en alvh.no-ip.org> wrote:
>
> Tengo una duda.  Supongase la funcion siguiente:
>
> void
> pgr_formtuple(Relation foo)
> {
>         int             natt = foo->natts;
>         char    arr[natt];
>         char    nulls[natt];
>
>         ...
> }
>

No tengo claro por qué el error, así que obviaré cualquier comentario
con esta forma.

>
> ...
>
> void
> pgr_formtuple(Relation foo)
> {
>         int             natt = foo->natts;
>         char   *arr;
>         char   *nulls;
>
>         arr = malloc(natt);
>         nulls = malloc(natt);
>
>         ...
>
>         free(arr);
>         free(nulls);
> }
>
>
> Pero me queda la duda si lo de arriba es realmente erroneo.

Según recuerdo de mi curso de C, el malloc necesita un argumento con
el tamaño del tipo de dato.

arr = malloc( sizeof(char) * natt);

Pero como sizeof(char) = 1 (un char se guarda con 1 byte), la función
debería funcionar de lo mejor.


> Por otra
> parte, yo se que lo siguiente si funciona:
>
>
> void
> pgr_formtuple(Relation foo)
> {
>         int             natt = foo->natts;
>
>         {
>                 char    arr[natt];
>                 char    nulls[natt];
>
>                 ...
>         }
> }
>
> Aca la consideracion es que las variables estan creadas en un stack que
> es interior al lugar donde se declara el tamaño que tendran las
> variables.  Pero no se si esto realmente influya o sea solamente
> cosmetico.

Yo me quedo con los punteros, se ve más bonitos (cosa de gustos, xD).

> Cualquier comentario es bienvenido.

Ojalá te sirva.

Saludos!

--
diegocaro | http://atenea.inf.udec.cl/~diegocaro/



Más información sobre la lista de distribución Linux