Punteros
Manipulación segura de punteros.
Funciones
void | ptr_get (...) |
void | ptr_dget (...) |
void | ptr_dget_no_null (...) |
void | ptr_assign (...) |
void | ptr_destopt (...) |
void | ptr_copyopt (...) |
La librería sewer proporciona macros y funciones para la manipulación "segura" de punteros. Por "seguro" entendemos el hecho de que el SDK detectará el acceso indebido a un puntero justamente antes de que se produzca una violación de segmento. ¿Que sentido tiene detectar accesos indebidos a memoria, si el programa va a fallar de todos modos? La detección previa juega un papel muy importante al ejecutar tests automatizados. Antes del inevitable cierre del proceso, dejará un apunte en el registro de ejecución log.txt, indicando el motivo del cierre.
- Utiliza ptr_get para obtener el contenido de un puntero.
ptr_get ()
Acceso al contenido del puntero (dereferencia), verificando previamente que no sea NULL
.
void ptr_get(type *ptr, type);
1 2 3 4 5 6 |
ptr | Puntero. |
type | Tipo de puntero. |
ptr_dget ()
Accede al contenido de un doble puntero, invalidándolo posteriormente.
void ptr_dget(type **ptr, type);
1 2 3 4 5 6 7 8 9 |
ptr | Double puntero. |
type | Tipo de puntero. |
ptr_dget_no_null ()
Igual que ptr_dget
, pero el contenido del double puntero (*dptr
) no puede ser NULL
.
void ptr_dget_no_null(type **ptr, type);
1 2 3 4 5 6 7 8 |
Ctrl *create(Model **model, View **view) { // *model and *view can't be NULL Ctrl *ctrl = heap_new(Ctrl); ctrl->model = ptr_dget_no_null(model, Model); ctrl->view = ptr_dget_no_null(view, View); return ctrl; } |
ptr | Double puntero. |
type | Tipo de puntero. |
ptr_assign ()
Asigna el contenido de un puntero a otro, si el destino no es NULL
.
void
ptr_assign(dest,
src);
dest | Puntero destino. |
src | Puntero origen. |
ptr_destopt ()
Destruye un objeto, si no es NULL
.
void ptr_destopt(FPtr_destroy func_destroy, type dptr, type);
1 2 3 4 5 6 |
cassert_no_null(dptr); if (*dptr != NULL) { func_destroy(*dptr); *dptr = NULL; } |
func_destroy | Destructor. |
dptr | Doble puntero al objeto a destruir. |
type | Tipo de objeto. |
ptr_copyopt ()
Copia el objeto si no es NULL
.
void ptr_copyopt(FPtr_copy func_copy, type ptr, type);
func_copy | Constructor de copia. |
ptr | Objeto a copiar (origen). |
type | Tipo de objeto. |