私はC言語を初めて使用しています。私はJavaについてより多くの背景知識を持っています。 私はアドレスがint値を格納しないので、findメソッドは私に最も可能性の高いセグメンテーションフォールトを与えるポインタポインタを使用してメモリを繰り返し処理する
#include <stdio.h>
void main(){
int value = 10;
find(value);
}
void find(int value){ // will change this to return array of long or int depending on which is better
int* intPointer;
for(int i = 40000; i < 40400 ; i+= 32){ /* not sure if i do it like this or another way,
* the starting value, ending value and condition
* is just for testing purpose */
intPointer = (int*)i;
if(*intPointer == value){
printf("found value"); //will actually be storing it to an array instead
}
}
}
を使用してメモリ内の値の検索を試してみたいです。メモリアドレスにどのようなタイプのデータが格納されているかを知る方法はありますか?
同様のタスクを達成するより良い方法はありますか?説明してください。実際のプログラムにはint value = ??
がありません。代わりにfindメソッドだけがこの値を含むアドレスの配列を取得するために使用されます。
また、アドレスint
またはlong
を保存するのに最適なタイプは何ですか?
*未定義の動作*を呼び出すことができます。結果はシステムに依存し、OSがアクセスするためにアドレスがprohivitedである場合、そこにアクセスするとOSによってプログラムが殺されることになります。あなたは 'void main()'を書いたので、マイクロコントローラのような独立した環境でこのコードを実行したいかもしれません(しかし 'printf()'はそこでサポートされていないかもしれません)。とにかく、宣言されていない関数の使用は悪いことに注意してください。 – MikeCAT
割り当てられていないメモリにアクセスしています.C/C++では未定義の動作なので、そのようにメモリをチェックすることはできません。ちなみに、intのサイズは実装に依存します:ループをインクリメントするには、32の代わりに 'sizeof(int)* 8'を使うべきです。なぜあなたは最初にそれをしたいのですか?たぶん私たちはあなたに別の方法を提案する可能性があります – wasthishelpful
アドレスを格納するための最良のタイプは(適切なタイプへの)ポインタです。 'int'と' long'は、互換表現と適切なサイズを持っているかもしれません。 – Dmitri