コードの一部を理解しようとしています。説明を簡単にし、不必要な混乱を避けるために、多くのコードを省略しています。
typedef void *UP_T;
void FunctionC(void *pvD, int Offset) {
unsigned long long int temp;
void *pvFD = NULL;
pvFD = pvD + Offset;
temp = (unsigned long long int)*(int *)pvFD;
}
void FunctionB(UP_T s) {
FunctionC(s, 8);
}
void FunctionA() {
char *tempstorage=(char *)malloc(0);
FunctionB(tempstorage);
}
int main () {
FunctionA();
return 0;
}
私が言ったように、私は大量のコードを省略しています。したがって、コードが 2 行しかないため役に立たないように見える関数です。
とはtemp
? それが私を混乱させているものです。このコードに似たものを実行しprintf()
、途中でステートメントを使用すると、 の乱数が得られ、pvD
そのpvFD
乱数に 8 を加えた値になります。
ただし、値を誤って出力することもできます (%llu
代わりに などを使用%d
)。プラス 8のメモリ内の場所へのポインターであると確信していtempstorage
ます。これは正しいですか? その仮定の下で続行する前に、確認したいだけです。