Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ing_maipu

#1
Hola
Usando como entorno de trabajo un MCU NXP KE02 estoy intentando hacer una función en C que me devuelva un string. El contenido de dicho string varia con lo cual estoy usando memoria dinámica. El problema que estoy teniendo, es que cuando ejecuto por primera vez la función, funciona perfecta. Sin embargo, debuggeando descubrí que cuando quiero ejecutarla por segunda vez, se me resetea el MCU en el momento de ejecutar la linea del pedido de memoria (calloc), evidenciando un problema de pérdida de memoria o algo por el estilo. La función en la siguiente:


char *editar_parametro{
char *str_escrito = NULL;
str_escrito = (char *) calloc (5,sizeof(char));
str_escrito[0] = '\0';
strcpy(str_escrito,"Hola");

return str_escrito;
}


int main(){
for(;;){

char *str = editar_parametro();
strcpy(str_global,str);
free(str);

}

}



Alguno tiene idea qué puede ser lo que esté andando mal?
Saludos y gracias
#2
Hola Gallu

Muchas gracias por tu respuesta. La misma me ha sido de gran ayuda para la implementación puesto que he hecho algo similar. La unica diferencia es que los campos los guardo en una  una matriz de cantidad de columnas variable (i.e, puntero doble) para así poder poner correctamente los separadores de campos cuando corresponda.

Saludos

#3
Muchas gracias por tu respuesta Didacso.

Había pensado en hacer algo de ese tipo pero sucede que la función que me envía las tramas al canal de comunicación recibe únicamente variables del tipo char*. Por esta razón estaba necesitando una función que me devuelva la trama como cadena de caracteres.

Sucede que para ese puntero doble que recibirá la función (char **campos), ya habré pedido memoria dinámica.

Entonces el procedimiento dentro de mi función consistirá en volver a pedir memoria dinámica y liberar la que ya habia pedido cuando creé el puntero doble?

Saludos
#4
Hola! Estoy intentando implementar una función en C que me arme una trama (cadena de caracteres) que luego será mandada a través de un canal de comunicación.

Para esto, primero tengo que crear la trama, la cual está compuesta de sus respectivos encabezados, campos de información, indicadores de fin de trama y finalmente el checksum.

Mi problema es que la longitud de la trama (cantidad de caracteres que poseerá) nunca será fija. Esto es, dependiendo de la trama que deseo enviar, varía la longitud de la misma, ya que ni la cantidad de campos es fija, ni la cantidad de caracteres lo es.

Para esto, se me ocurrió que podía hacer una función cuya declaración sea la siguiente:

char *armar_trama(char **campos, int cant_campos);//Funcion que devuelve una trama ya armada lista para enviar.


En donde **campos vendría a ser un vector de <cant_campos> cadenas de caracteres, en donde cada una de estas es de longitud distinta. Cada uno de estas cadenas representará un campo disitinto.

La idea es que la función concatene cada uno de estos campos dentro de una misma cadenas de caracteres y luego esta cadena de caracteres (trama) sea devuelta por la función.

Mi pregunta es: ¿Es necesario pedir memoria dinámica cada vez que concateno un campo dentro de la cadena de caracteres (trama) que será devuelta?

Muchas gracias por su ayuda