Спасибо всем за ваши ответы.
К сожалению, я не могу использовать boost или другие библиотеки в этом проекте ... поэтому все эти предложения для меня бесполезны.
Я посмотрелна такие вещи, как обработка исключений в C, как здесь ... http://www.halfbakery.com/idea/C_20exception_20handling_20macros
А потом я посмотрел на то, почему в C ++ нет окончательно, как в Java, и натолкнулся на этот материал RAII.Я до сих пор не уверен, пойду ли я деструктором и сделаю код только на C ++, или останусь с макросом исключений C (который использует страшный goto:)
Tronic предложил что-то вроде следующего.С RAII, или деструкторами в целом, они должны быть защищены от сегрегаций?Наверное, нет.
Единственное, что мне не нравится, это то, что мне теперь приходится использовать приведение (char *) в моих выражениях printf.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct CharWrapper {
char* str;
CharWrapper(): str() {} // Initialize NULL
~CharWrapper() {
printf("%d auto-freed\n", str);
free(str);
}
// Conversions to be usable with C functions
operator char*() { return str; }
operator char**() { return &str; }
};
// a crappy library function that relies
// on the caller to free the memory
int get_a_str(char **x){
*x = (char*)malloc(80 * sizeof(char));
strcpy(*x, "Hello there!");
printf("%d allocated\n", *x);
return 0;
}
int main(int argc, char *argv[]){
CharWrapper cw;
get_a_str(cw);
if(argc > 1 && strcmp(argv[1], "segfault") == 0){
// lets segfault
int *bad_ptr = NULL;
bad_ptr[8675309] = 8675309;
}
printf("the string is : '%s'\n", (char*)cw);
return 0;
}