構造ポインタには構造ポインタが含まれています
2723 ワード
C++コードをCに変換する過程で、いくつかのC++の特性は使用できません
クラス内のプライベート変数はクラス内の共通関数で使用され、Cに変換するときにmallocで保存する方法を選択し、メモリ空間を申請して保存し、関数の中でポインタ形パラメータを伝えてこれらの変数を操作します.
このとき、構造体に別の構造体のポインタが含まれているという問題が発生し、mallocの場合、別の構造体のメモリ領域が申請されませんでした.
以下の簡単な例をまとめます.
クラス内のプライベート変数はクラス内の共通関数で使用され、Cに変換するときにmallocで保存する方法を選択し、メモリ空間を申請して保存し、関数の中でポインタ形パラメータを伝えてこれらの変数を操作します.
このとき、構造体に別の構造体のポインタが含まれているという問題が発生し、mallocの場合、別の構造体のメモリ領域が申請されませんでした.
以下の簡単な例をまとめます.
#include
#include
typedef struct _point{
int m;
int n;
}point, *ppoint;
typedef struct _PELoader{
int m_hModule;
ppoint m_pImportDesp;
}PELoader, *PPELoader;
void load(PELoader **Ldr);
int main()
{
printf("%d
", sizeof(PELoader));// 8, m_hModule , :4
PPELoader Ldr = (PPELoader)malloc(sizeof(PELoader));
Ldr->m_pImportDesp = (ppoint)malloc(sizeof(point));// m_pImportDesp (point)
load(Ldr);
printf("%d,%d,%d", Ldr->m_pImportDesp->m, Ldr->m_pImportDesp->n, Ldr->m_hModule);
return 0;
}
void load(PELoader *Ldr)
{
Ldr->m_hModule = 2;
Ldr->m_pImportDesp->m = 3;// m_pImportDesp ,
Ldr->m_pImportDesp->n = 5;
}