utiliza sintaxis resueltos memoria funcion ejercicios ejemplos ejemplo dinamicos dinamica como arreglos c operating-system kernel systems-programming

sintaxis - ¿Cómo implementar correctamente las funciones c malloc/realloc?



realloc c ejemplo (1)

El comportamiento en el uso del puntero devuelto por su malloc no está definido : está devolviendo la dirección de una matriz con duración de almacenamiento automática.

Como un comienzo difícil, considere usar una matriz de caracteres static para modelar su grupo de memoria, y devolver los segmentos de esto a la persona que llama; construyendo una tabla de esa matriz que está actualmente en uso. Tenga en cuenta que tendrá que hacer cosas inteligentes con la alineación aquí para garantizar que el void* devuelto void* cumpla con los requisitos de alineación de cualquier tipo. free albedrío entonces será poco más que liberar un registro en esa tabla.

Tenga en cuenta que los sistemas de gestión de memoria que utiliza una biblioteca típica de tiempo de ejecución de C son muy sofisticados. Con esto en mente, aprecie que su empresa puede ser poco más que un buen ejercicio de programación.

Estoy escribiendo mi propio sistema operativo y tuve que implementar mis propias funciones malloc realloc. Sin embargo, creo que lo que he escrito puede no ser seguro y también puede causar una pérdida de memoria porque la variable no se destruye realmente, su memoria se establece en cero, pero el nombre de la variable aún existe. ¿Podría alguien decirme si hay vulnerabilidades en este código? El proyecto se agregará a github tan pronto como esté terminado en el usuario subado512.

Código:

void * malloc(int nbytes) { char variable[nbytes]; return &variable; } void * free(string s) { s= (string)malloc(0); return &s; } void memory_copy(char *source, char *dest, int nbytes) { int i; for (i = 0; i < nbytes; i++) { *(dest + i) = *(source + i); // dest[i] = source[i] } } void *realloc(string s,uint8_t i) { string ret; ret=(string)malloc(i); memory_copy(s,ret,i); free(s); return &ret; }

Contexto en el que se usa el código: bit de pseudo código para aumentar la legibilidad

string buffstr = (string) malloc(200); uint8_t i = 0; while(reading) { buffstr=(string)realloc(buffstr,i+128); buffstr[i]=readinput(); }