He escrito una API que requiere que se inicialice un contexto y, posteriormente, pase a cada llamada API. La persona que llama asigna la memoria para el contexto y luego la pasa a la función de inicio con otros parámetros que describen cómo quieren que se comporten las llamadas posteriores de la API. El contexto es opaco, por lo que el cliente no puede realmente perder el tiempo allí; solo está destinado para el uso interno de las funciones API.Verificación de que la memoria se ha inicializado en C
El problema al que me estoy enfrentando es que las personas que llaman están asignando el contexto, pero no lo están inicializando. Como resultado, las funciones API posteriores se refieren a basura sin sentido como si fuera un contexto real.
Estoy buscando una manera de verificar que el contexto pasó a una función de API realmente se ha inicializado. No estoy seguro si esto es posible. Dos ideas en las que he pensado son:
- Use una constante predefinida y guárdela en un campo "mágico" del contexto que se verificará en el tiempo de invocación de la API.
- Utilice una suma de comprobación del contenido del contexto, almacénelo en el campo "mágico" y verifíquelo en el momento de la invocación.
Lamentablemente sé que cualquiera de estas opciones podría dar como resultado una verificación positiva falsa, ya sea porque la basura aleatoria en la memoria coincide con el número "mágico" o porque el contexto ocupa el mismo espacio que un inicializado previamente contexto. Creo que este último escenario es más probable.
¿Esto simplemente se reduce a una cuestión de probabilidad? ¿Que puedo evitar falsos positivos en la mayoría de los casos, pero no en todos? ¿Vale la pena utilizar un sistema que simplemente me da una probabilidad razonable de precisión, o esto solo haría que la depuración de otros problemas sea más difícil?
Esto solo es cierto para las compilaciones de depuración: no puede confiar en esto para el código de versión –