Dev - C++ - Programa en C - Liberar memoria - un poco de ayuda

 
Vista:
Imágen de perfil de Arii
Val: 16
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Programa en C - Liberar memoria - un poco de ayuda

Publicado por Arii (6 intervenciones) el 01/08/2020 01:20:34
Buenas tardes a todos. Me dijo a ustedes esta tarde para pedir su asistencia en una duda que tengo con un programa en C. Mi objetivo diseñar un código que sea capaz de buscar cuantas veces se repite un carácter en una determinada cadena de caracteres utilizando asignación dinámica.

No encontré una manera directa de hacerlo, por lo que empecé con algo simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
int main(){
	int longitud;
	char cad[20];
	char let = 'c';
	int i, j=0;
 
	printf("Ingrese su cadena de hasta 20 caracteres:\n ");
	scanf("%s", cad);
	longitud = strlen(cad);
 
	for(i=0;i<longitud;i++){
		if(cad[i]==let){
			j++;
		}
	}
	printf("La letra %c aparece %i veces\n",let,j);
	return 0;
 
}

Este código me devuelve lo que busco, salvo la asignación dinámica. No entiendo muy bien los punteros asi que no estoy segura de como se maneja la memoria, se que la función Int almacena una cantidad determinada por el siguiente valor Cad 20. Esto me hace pensar en una forma de liberar dicha memoria al final.

¿Se puede adaptar este código para quie usé la asignación dinámica de memoria de modo que libere la memoria al final?. Agradezco su apoyo, ya que me encuentro estancada. :)
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

Programa en C - Liberar memoria - un poco de ayuda

Publicado por Nacho (181 intervenciones) el 01/08/2020 09:20:49
Todo lo que usas en esa función se almacena en la pila. Almacenar algo en la pila consiste nada más en mover un puntero hacia adelante las posiciones que sean, 24 en tu caso si es en 32 bits. Al salir de la función todo eso se pierde sin necesidad de hacer nada más. Es la mejor manera de usar la memoria.
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

Programa en C - Liberar memoria - un poco de ayuda

Publicado por Nacho (181 intervenciones) el 01/08/2020 11:51:16
Ah, que tienes que usar memoria dinámica.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() {
    int longitud;
    //char cad[20];
    char* cad = new char[20];
    char let = 'c';
    int i, j = 0;
    printf("Ingrese su cadena de hasta 20 caracteres:\n ");
    scanf("%s", cad);
    longitud = strlen(cad);
    for (i = 0; i < longitud; i++) {
        if (cad[i] == let) {
            j++;
        }
    }
    printf("La letra %c aparece %i veces\n", let, j);
    delete[] cad;
    return 0;
}

Se crea y se destruye.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Arii
Val: 16
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Programa en C - Liberar memoria - un poco de ayuda

Publicado por Arii (6 intervenciones) el 02/08/2020 01:10:02
El código funciona perfectamente. Muchas gracias por la ayuda, realmente me había estancado :). No estaba segura de como implementar el operador "New", ahora se donde iniciar.
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