Lo que quiero hacer es crear una funcion que reserve memoria y rellene con varios caracteres, a la vez la funcion me devuelve con return un numero
Esto es mas o menos lo que me gustaria tener.
Código C++:
Ver original
| |||
Usar malloc dentro de una funcion Soy bastante novato en cuanto el tema de este lenguaje. Lo que quiero hacer es crear una funcion que reserve memoria y rellene con varios caracteres, a la vez la funcion me devuelve con return un numero Esto es mas o menos lo que me gustaria tener.
Código C++:
Ver original Última edición por shekel; 17/03/2016 a las 09:32 |
| |||
Respuesta: Usar malloc dentro de una funcion Vamos a empezar por lo sencillo:
Código C++:
Ver original ¿Qué se imprime por pantalla? Pues hombre, teniendo en cuenta que var es una variable local sus cambios no van a afectar en nada a numero, luego std::cout imprimirá 0. Ahora complicamos un poco más el código:
Código C++:
Ver original El programa ahora imprime la dirección de memoria apuntada por el puntero y el valor almacenado en dicha posición de memoria. func intenta modificar el valor apuntado por el puntero var. Al ser var un puntero y apuntar a numero es capaz de modificar su valor correctamente, luego el primer cout imprimirá una dirección de memoria y el número 5. Le llega el turno a func2. Esta función intenta modificar la dirección de memoria apuntada por var, pero claro, si modificas la dirección a la que apunta var estás modificando la memoria local de var, luego el cambio no se queda reflejado fuera de func2. Esto implica que el cambio no tiene efectos en ptr. Con todo esto lo que sucede es que el programa imprime dos líneas iguales. Una vez comprendido esto pasamos a tu código:
Código C++:
Ver original Como has visto antes, si quieres modificar la dirección apuntada no puedes tirar de un puntero sino en tal caso necesitas un puntero doble (un puntero permite modificar el valor apuntado, un puntero doble permite modificar la dirección apuntada por el puntero simple, etc).
Código C++:
Ver original Vale, ya tenemos la función terminada... ¿Qué tal si revisamos el uso?
Código C++:
Ver original Fallo gordo en la primera línea. La definición de obj es de tipo char a secas, es decir, no es un puntero. Esto implica por un lado que no va a ser capaz de almacenar nada más que un sólo caracter (olvidate de almacenar cadenas) y por otro que cualquier intento por cambiar su dirección de memoria va a provocar un casque de la aplicación:
Código C++:
Ver original Si queremos que obj pueda manejar memoria dinámica tiene que ser un puntero. Así de simple. Y no nos debemos olvidar de liberar la memoria reservada cuando ya no la necesitamos. Las buenas costumbres hay que cogerlas desde el principio. Con todo esto tenemos lo siguiente:
Código C++:
Ver original Que sería más acorde a lo que tú necesitas. El código no está ni compilado ni mucho menos probado. He escrito la respuesta sobre la marcha así que no puedo garantizar que esté libre de errores... pero a grandes rasgos parece estar bien. Un saludo.
__________________ La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo. |
Etiquetas: |