2013-03-25 53 views
1

動態矢量我有一個預定義的結構使用方法:創建預定義的結構

typedef struct somestruct_s { 
    int s; 
    union { 
     unsigned char *ptr; 
     unsigned char l_ptr[sizeof(char *)]; 
    }; 
}somestruct_t, *somestruct; 

它包含聯盟,以減少內存使用情況。 我知道大小可能因m32和m64編譯(指針大小)而異。 我的問題是如何「使用」我的精確分配結構。這個結構的目的是實現基本的位操作,s變量包含位圖的大小(以字節爲單位)。如果位圖可以放入指向位圖的內存中,那麼我們在那裏分配它。我寫了一些位圖操作,但我不能真正得到結構或如何操作它。

+0

可能重複使用結構的聯盟](http://stackoverflow.com/questions/15660737/extendable-map-vector-using-structure-of-union) – 2013-03-27 14:43:03

回答

0

我不明白你的問題是什麼。你必須有一個主要功能,將根據指針大小正確的指針返回位圖:

unsigned char* somestruct_get_bitmap(somestruct_t* ths) { 
    if(sizeof(char*) > ths->s) 
     return ths->ptr; 
    return ths->l_ptr; 
} 

所有其他功能必須使用此功能以獲得正確的指針位圖。還需要構造函數/析構函數對初始化/以正確的方式取消初始化位圖指針(原因我顯示假設你有空值終止的位圖最簡單的例子):

unsigned char* somestruct_init(somestruct_t* ths, unsigned char* ptr) { 
    ths->s = strlen(ptr) + 1; 
    if(sizeof(char*) > ths->s) { 
     ths->ptr = strdup(ptr); 
     return; 
    } 
    strcpy(ths->l_ptr, ptr); 
} 

unsigned char* somestruct_destroy(somestruct_t* ths) { 
    if(sizeof(char*) > ths->s) { 
     free(ths->ptr); 
     return; 
    } 
} 
[擴展地圖矢量
+0

thx隊友,這給了我一些輕微的想法如何解決它。 – user2207495 2013-03-26 08:53:46