Tengo una función que reasigna un puntero dado como argumento a un nuevo tamaño. Ahora, el problema es que, de acuerdo con la página del manual, realloc
necesita un puntero que haya sido devuelto por malloc
o calloc
anteriormente.¿Cómo puedo asegurarme de que una persona que llama pasa un puntero malloc?
¿Cómo puedo asegurarme de que la persona que llama pasa un puntero que cumpla con esos requisitos? Parece que no hay mecanismos de C incorporados (como calificadores de tipo o algo así) para hacerlo.
Ahora, antes de reestructurar mi API (ya que considero que la función ya no es lo suficientemente robusta), ¿puede verificar que no me he perdido algo?
Gracias de antemano.
Editar: Una solución sería evidentemente a malloc en la función. El problema con eso es que la persona que llama no "ve" la asignación. Por lo tanto, tendría que decir explícitamente en los documentos que tiene que liberar el puntero. Eso es incluso peor que esperar que proporcionen un puntero malloc (lo que implicaría que la persona que llama tiene que liberarlo).
Lo que realmente quiero es algo que bloquee el abuso en tiempo de compilación. Eso, y un pony. ;-)
¿Es necesario para que sea realmente tan a prueba de tontos? – Nyan
al menos me gustaría, sí – RWS
Como no puedes, probablemente deberías dejar de preocuparte y hacer algo más interesante. Las personas pueden subvertir ** cualquier ** o ** toda ** comprobación o prevención que desee probar. No pierdas tiempo previniendo. Invierta tiempo en estrellarse alto y claro para que puedan leer el mensaje de error y darse cuenta de su error. –