#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
typedef struct my_struct {
int *x;
float *y;
long int *z;
} my_struct;
void destroy(my_struct *s);
int init(my_struct **ms)
{
my_struct *s = NULL;
do{
s
= (my_struct
*) malloc(sizeof(my_struct
)); if (s == NULL) {
printf("alloc my_struct fail\n"); break;
}
s
->x
= (int *) malloc(sizeof(int)); if (s->x == NULL) {
break;
}
s
->y
= (float *) malloc(sizeof(float)); if (s->y == NULL) {
break;
}
s
->z
= (long int*) malloc(sizeof(long int)); if (s->z == NULL) {
break;
}
*ms = s;
return 0;// success init
}while(0);
//something wrong
destroy(s);
*ms = NULL;
return -ENOMEM;
}
void destroy(my_struct *s)
{
if(s == NULL){
return;
}
if (s->x != NULL) {
}
if (s->y != NULL) {
}
if (s->z != NULL) {
}
}
int main(int argc, const char *argv[])
{
my_struct *s = NULL;
if (init(&s)) {
printf("Init my_struct failed\n"); return -ENOMEM;
}
// use my_struct here ...
destroy(s);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGVycm5vLmg+Cgp0eXBlZGVmIHN0cnVjdCBteV9zdHJ1Y3QgewogICAgaW50ICp4OwogICAgZmxvYXQgKnk7CiAgICBsb25nIGludCAqejsKfSBteV9zdHJ1Y3Q7Cgp2b2lkIGRlc3Ryb3kobXlfc3RydWN0ICpzKTsKCmludCBpbml0KG15X3N0cnVjdCAqKm1zKQp7CglteV9zdHJ1Y3QgKnMgPSBOVUxMOwoJZG97CgkgICAgcz0gKG15X3N0cnVjdCAqKSBtYWxsb2Moc2l6ZW9mKG15X3N0cnVjdCkpOwoJICAgIGlmIChzID09IE5VTEwpIHsKCSAgICAgICAgcHJpbnRmKCJhbGxvYyBteV9zdHJ1Y3QgZmFpbFxuIik7CgkgICAgICAgIGJyZWFrOwoJICAgIH0KCQoJICAgIHMtPnggPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSk7CgkgICAgaWYgKHMtPnggPT0gTlVMTCkgewoJICAgICAgICBwcmludGYoImFsbG9jIHggZmFpbFxuIik7CgkgICAgICAgIGJyZWFrOwoJICAgIH0KCQoJICAgIHMtPnkgPSAoZmxvYXQgKikgbWFsbG9jKHNpemVvZihmbG9hdCkpOwoJICAgIGlmIChzLT55ID09IE5VTEwpIHsKCSAgICAgICAgcHJpbnRmKCJhbGxvYyB5IGZhaWxcbiIpOwoJICAgICAgICBicmVhazsKCSAgICB9CgkKCSAgICBzLT56ID0gKGxvbmcgaW50KikgbWFsbG9jKHNpemVvZihsb25nIGludCkpOwoJICAgIGlmIChzLT56ID09IE5VTEwpIHsKCSAgICAgICAgcHJpbnRmKCJhbGxvYyB6IGZhaWxcbiIpOwoJICAgICAgICBicmVhazsKCSAgICB9CgkgICAgKm1zID0gczsKCQlyZXR1cm4gMDsvLyBzdWNjZXNzIGluaXQJCQoJfXdoaWxlKDApOwoJCgoJLy9zb21ldGhpbmcgd3JvbmcKCWRlc3Ryb3kocyk7CgkqbXMgPSBOVUxMOwogICAgcmV0dXJuIC1FTk9NRU07IAoKfQoKdm9pZCBkZXN0cm95KG15X3N0cnVjdCAqcykKewoJaWYocyA9PSBOVUxMKXsKCQlyZXR1cm47Cgl9CgkKICAgIGlmIChzLT54ICE9IE5VTEwpIHsKICAgICAgICBmcmVlKHMtPngpOwogICAgfQoKICAgIGlmIChzLT55ICE9IE5VTEwpIHsKICAgICAgICBmcmVlKHMtPnkpOwogICAgfQoKICAgIGlmIChzLT56ICE9IE5VTEwpIHsKICAgICAgICBmcmVlKHMtPnopOwogICAgfQoKICAgIGZyZWUocyk7Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCnsKICAgIG15X3N0cnVjdCAqcyA9IE5VTEw7CiAgICBpZiAoaW5pdCgmcykpIHsKICAgICAgICBwcmludGYoIkluaXQgbXlfc3RydWN0IGZhaWxlZFxuIik7CiAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICB9CgogICAgLy8gdXNlIG15X3N0cnVjdCBoZXJlIC4uLgoKICAgIGRlc3Ryb3kocyk7CgogICAgcmV0dXJuIDA7Cn0=