Tamaño de vector dinamico en c++

Z

Necesito saber el tamaño de un vector de tipo char,creado en memoria dinámica

char* cad;
int tam=(sizeof(cad)/sizeof(char));//esto se supone que en memoria dinámica no funciona
ni esto
int tam=(sizeof(cad)/sizeof(cad[0]))

Como puedo obtener el tamaño?

r2d2rigo

#1 No puedes, a no ser que lo guardes manualmente cuando haces malloc o new. Eso no es un "vector dinamico", eso es un puntero, y apunta a una direccion de memoria que puede tener un tamaño muy dispar. Puedes intentar hacer strlen y te dara la longitud de la cadena que hay dentro hasta el caracter de finalizacion (null o \0), pero el tamaño total del puntero puede ser mucho mayor.

2 respuestas
p0stm4n

¿Por qué no pruebas a usar std::vector?, la STL bien usada no es el demonio ni nada, solo tendrias algun problemas si se programa para dispositivos con memoria limitada.

1 respuesta
Z

#3
Es que tengo que hacerlo así

2 respuestas
Thanat0s

#4 Pero cuando te preguntan por el tamaño, ¿estás seguro de que están preguntando por el tamaño en disco y no por la longitud?

Porque es básicamente lo que te ha dicho #2, no se puede saber el tamaño.

B

Aparte, un char* en C++ se puede reservar de multiples formas. Si esta hecho con malloc segun la implementación hay formas dependientes de obtener el tamaño reservado para un puntero.

Para el new básicamente no puedes. El runtime sabe cuantos items tienes reservados, pero la respuesta corta (segun el Effective C++) es "magia".

Sería interesante que releyeses el enunciado porque, como #2 y #4 sugieren es posible que te estén preguntando otra cosa. Si este ejercicio no es una prueba para entrar en Facebook o similar, seguramente no te están preguntando esto porque es una pregunta bastante avanzada. Yo me decanto por la opción de la longitud de un string (por lo de que es un char*) porque, si fuera la "dificil" hubieran usado ints o algun otro tipo de dato.

Usuarios habituales