ポインタ演算やメモリの割り当て方法を理解するのに苦労しています。以下のコード スニペットでは、「test」の 8 バイト前にある「size = 1」の値にアクセスしようとしていますが、size の値を取得できず、値はランダムではありません。したがって、バイトサイズの理解に問題がある可能性があります。void*、long、および char が 8 バイトの場合、ポインター演算を使用するときに問題になりますか?
#include <iostream>
using namespace std;
char arrayOfCrap[100];
void * what(){
long * size ;
size = (long*)&arrayOfCrap[28];
*size = 1;
return ((void*) &arrayOfCrap[29]);
}
int main(){
long * test;
test = (long*)what();
*test = 1221;
cout << "Value of test: " << *test << endl;
cout << "Long number before test: " << *(test-1) << endl;
}
このコードは、main が what() の void* ' ポインターから前方に移動したときに機能します。
#include <iostream>
using namespace std;
char arrayOfCrap[100];
void * what(){
long * size ;
size = (long*)&arrayOfCrap[28];
*size = 1;
return ((void*) &arrayOfCrap[28]); //change from above
}
int main(){
long * test;
test = (long*)what();
test++; //change from above
*test = 1221;
cout << "Value of test: " << *test << endl;
cout << "Long number before test: " << *(test-1) << endl;
}