编写小型库时管理已分配变量的最佳实践

时间:2014-01-07 19:16:13

标签: c malloc static-libraries free dynamic-library

我目前正在编写一个安全字符和安全列表的小库(我将在未来的项目中添加.c / .h文件)而且有些事情困扰着我,我知道有些人会认为它是主观的但我认为有一个“真正的”最佳方式。我搜索过,但没有什么可以给我一个密切的答案。以下是我的代码示例。

使用的结构和功能:

typedef struct _secure_list
{
    cookie secret; // MUST be set to Cookie 
    secure_char * schar;
    struct _secure_list * next;
} secure_list;

typedef struct _secure_char
{
    int length; // number of characters in the string
    char    * str;  // the string (no \0 byte at the end of the string)
} secure_char;


/**
 * Create a secure list with schar
 * Initialize Cookie on first use
 **/
 ret_value createSecureList( secure_char * scIn, secure_list ** slist )

我认为有两种方法可以编写createSecureList函数:

 // FIRST WAY
 ret_value createSecureList( secure_char * scIn, secure_list ** slist )
 {
    (*slist) = NULL;
    (*slist) = (secure_list *) malloc( sizeof(secure_list) );

    // we copy the secure_char so it can be freed in the caller
    createSecureChar("",&((*slist)->schar));
    concat2SecureChar(&((*slist)->schar), scIn);
    ...
 }

 // SECOND WAY
 ret_value createSecureList( secure_char * scIn, secure_list ** slist )
 {
    (*slist) = NULL;
    (*slist) = (secure_list *) malloc( sizeof(secure_list) );
    (*slist)->schar = scIn; 
    ...
 }

在我的主要()中我有:

void main()
{
   secure_list * slist_Test;
   secure_char * schar_Test;
   ....
   createSecureChar("test test",&schar_test); 
   createSecureList(schar_Test,&slist_Test); 
   ....
}

我的问题是,尽管第二种方式更容易编码和理解,但作为链接列表的安全列表将指向与schar_Test相同的内存空间,因此如果我们释放其中一个,我们释放两者。第一种方法基本上创建了schar_Test的副本,因此可以在调用函数中释放它。

有人能告诉我哪种方式“正确”吗?

0 个答案:

没有答案