Ejecutando complementos en una caja de arena

Estoy diseñando un sistema en C / C ++ que es extensible con todo tipo de complementos. Hay una API pública C bien definida que funciona principalmente con(const) char* y otros tipos de punteros. Los complementos se compilan en archivos .so o .dll, y la aplicación principal los carga en el inicio, y luego los descarga o los vuelve a cargar a petición.

Los complementos pueden provenir de varias fuentes, confiables o no :)

Ahora, me gustaría asegurarme de que si un complemento hace algo estúpido (como intentar liberar una memoria que se suponía que no debía liberar), esta acción no derriba todo el sistema, sino que simplemente advierte al sistema principal el complemento de mal comportamiento para eliminarlo de la cola.

Las llamadas de código se realizan de la siguiente manera:

const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
   plugins[i]->execute(data);
}

pero siplugin[0]libera "por accidente" la cadena de datos o la sobrescribe o, por error, salta a la dirección 0x0, lo que provocaría la caída de todo el sistema, y ​​no quiero esto. ¿Cómo puedo evitar este tipo de catástrofe? (Lo sé, puedo duplicar ladata cadena ... esto no resuelve mi problema :))

Respuestas a la pregunta(3)

Su respuesta a la pregunta