时间:2010-07-25 14:45:36

标签: c

6 个答案:

答案 0 :(得分:6)

答案 1 :(得分:4)

答案 2 :(得分:1)

答案 3 :(得分:1)

答案 4 :(得分:0)

答案 5 :(得分:0)

我宁愿使用一些函数来动态分配数据,而是正确地释放它。

使用此技巧只会省去初始化数据结构的麻烦,并可能导致非常糟糕的问题(请参阅Jerry的评论)。

我会做这样的事情:

typedef struct foo {
       void *data;
       char *comment;
       size_t num_foo;
    }foo;
foo *alloc_foo( void * data, size_t data_size, const char *comment)
{
   foo *elem = calloc(1,sizeof(foo));
   void *elem_data = calloc(data_size, sizeof(char));
   char *elem_comment = calloc(strlen(comment)+1, sizeof(char));
   elem->data = elem_data;
   elem->comment = elem_comment;

   memcpy(elem_data, data, data_size);
   memcpy(elem_comment, comment, strlen(comment)+1);
   elem->num_foo = data_size + strlen(comment) + 1;
}

void free_foo(foo *f)
{
   if(f->data)
      free(f->data);
   if(f->comment)
      free(f->comment);
   free(f);
}

请注意,我没有检查数据有效性,我的alloc可以优化(用存储的长度值替换strlen()调用)。

在我看来,这种行为更安全......可能是传播数据块的代价。