最初に、最初のトピックに固執するのではなく、2 番目のトピックを作成した場合は謝罪する必要がありますが、stackoverflow は初めてです。
私が持っていた前の質問で尋ねました: 事前定義された構造体で動的ベクトルを作成する
そして、私が抱えていた問題について多くの有用な情報を受け取りました. しかし、問題はまだ解決するのに完全に透明ではありません。
まだ@その構造で働いています:
typedef struct somestruct_s {
int s;
union {
unsigned char *ptr;
unsigned char l_ptr[sizeof(char *)];
};
}somestruct_t;
最後の質問以来、私はコーディングを行い、解決策を見つけるために最善を尽くしてきました。それ以来、問題は私にとってより明確になりました。このプログラムのポイントは、ビット操作に使用される動的で拡張可能なマップ、マップを作成することです。エンドポイントは、次のようないくつかのビットを設定できるマップです: マップの 260 インデックスのビットを 1 に設定します。マップへのポインターによって占有されているメモリにマップが収まる場合は、そこに配置できます。この組合の。もう 1 つの問題は、マップ内に収まらないビットに関する質問がある場合、エラーがないことです。ビット 0 があると単純に答えます。たとえば、そのマップ内に収まらないビット位置に 0 を設定すると、マップは拡張されません。マップの拡張は、マップの外側で「ビットを 1 に設定する必要がある」という 1 つの状況でのみ実行する必要があります。
AnatolyS は、アイス ブレーキングのヒントをいくつか教えてくれました。
私がよく理解していれば、サイズに基づいてポインタまたはマップを返す関数:
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;
}
}
しかし、私はまだそれを十分に明確に見ていません。特に、コンストラクターと、マップを拡張する状況下でメモリの再割り当てがどのように見えるかがよくわかりません。または、ポインターを操作して拡張可能なマップの値を設定および取得する方法。
申し訳ありませんが、それを簡単に表現することはできませんが、情報は限られています。私の知識のように;)