関数ポインタでオーバーフロー – プログラミング – Home

関数ポインタでオーバーフロー
 
通知
すべてクリア

関数ポインタでオーバーフロー


任たま
 任たま
(@任たま)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

いつもお世話になっております。

いま、書いているプログラムで関数ポインタを使用しているのですが、
オーバーフローをしているみたいなのです。

関数ポインタを使用するときに、気をつけないといけないことってありますか?

ちなみに、下記の場合ですと、test[10]の値が書き変わってしまうのです。

typedef struct tagA{

int (*func)(int *, void *);
int test[10];

}A;
関数ポインタの宣言も関数に合わせて(引数の型など)書いてます。
なにか、ありましたらおしえていただけませんでしょうか?


引用解決済
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>typedef struct tagA{
> int (*func)(int *, void *);
> int test[10];
>}A;
これだけでは
>test[10]の値が書き変わってしまうのです
ということはあなた以外の誰にもあなたの仰(おっしゃ)る事がおこるかどうかも判りません
少なくとも、どのような場合にそうなるのか位は書かないと何が何だか分りません

オーバーフローしているらしいと判断した理由は何ですか?
何が起きたのでそう思うのでしょうか?
判断ではなく、事実を教えて下さい


返信引用
任たま
 任たま
(@任たま)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

>オーバーフローしているらしいと判断した理由は何ですか?

test[10] の 値が自分が設定した値とは違うものだったのです。
 そこで 下記のように AAAA[10] を追加したら、 test[10]に入る値
 は自分が設定した値になりましたので、オーバーフローしたのではないかと
 考えています。
 AAAA[10] の値も見覚えが無い値でしたし・・・
 
typedef struct tagA{
int (*func)(int *, void *);
int AAAA[10];
 int test[10];
}A;

 


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

・func, AAAA, testにどういう値をどのようにして設定したのか
・「見覚えのない値」がどのようになっていたのか

を教えてください。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

あと、「funcに与えたポインタが指している関数の宣言部分」も。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

これだけの情報では、誰に質問しても解らないと思います。

デバックで1ステップづつ追っかけていけば自分で解ると思いますが。

該当するデータをウォッチしてステップ実行してみてください。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

オーバーフローという言葉は普通はそういう場合には使いません。
もっとも、バッファーオーバーフローという言葉も有りますが、この場合に当てはまるかどうか
あまり自信がありません。
つまり、予期しない領域に書き込みが起こって、データーが壊れたという事ですね?

では、どのようにした場合に構造体 A の test[10] に異常なデーターの書き込みが
起きるのですか?


返信引用
きー
 きー
(@きー)
ゲスト
結合: 22年前
投稿: 6
 

サンプル全部試しましたが異常なしであります!

初期化とかチェックしてましょう。たとえば、ZeroMemory(test, sizeof(char)*10)
とかしてないかな?sizeof(long)ならいってることおきそうかな。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 22年前
投稿: 830
 

test[10] は存在しないのでそこに入っている値には何の意味も無いという罠かも。
test[0]...test[9] しか無い、ということは正しく理解していますか>元発言者


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました