C/Visual C - Vector en C

 
Vista:

Vector en C

Publicado por Iñaki (1 intervención) el 05/09/2005 23:32:43
Hola

Escribo para ver si me pueden solucionar una duda que tengo. Estoy trabajando con memoria dinámica, he creado un vector y necesito que una función sepa cuál es la capacidad de dicho vector (a ésta se lo paso como parámetro). ¿Existe alguna función que me lo diga, como en JAVA el vector.length() o algo similar? Se me había ocurrido almacenar en una variable lo siguiente:

int n_casillas;
n_casillas = sizeof(vector) / sizeof(tipo_dato);

Imagino que funcionará, pero es poco elegante. Así que a ver si hay suerte y dicha función existe.
Gracias.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Vector en C

Publicado por Googol (255 intervenciones) el 06/09/2005 00:17:28
Hola

No, no, eso no funciona, porque vector supongo que será un puntero:

tipo_dato *vector;

y el operador sizeof te da el tamaño _de la variable_.. El tamaño de una variable de tipo puntero (independientemente del tipo al que apunte) es siempre 4 (vamos, en las arquitecturas de 32 bits ;-)).

Total, que no hay forma de hacerlo (al menos una proporcionada nativamente por el lenguaje). Siempre se puede hacer algún apaño analizando cómo funciona el gestor de memoria dinámica, pero es una solución sucia y no portable.

La mejor solución es guardar el vector dentro de una estructura:

struct Vector {
int tam;
tipo_dato *contenido;
};

Y cuando pidas memoria lo haces para "contenido" y actualizas "tam". Las funciones que necesiten el vector, que reciban la estructura y listo. Obviamente, también lo puedes hacer pasando dos parámetros (el puntero y su tamaño), pero es un poco más difícil de mantener, porque hay que andar vigilando a mano que ambos valores siempre vayan juntos y sean coherentes.

Suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar