jishupro's Introduction
jishupro's People
Forkers
kindseniorjishupro's Issues
nextActionで代入できないバグ
nextActionで代入できないバグを昨晩,見てみたんだけど,このコミット があるということは自分で直せたってことかな?すごいね!!!!!
- include guard(TEX_H)が間違えててaction.hがincludeされない
- draw_function.cのコンパイル時にnextActionが見つかってないので,返り値が別の型(おそらくnextafterlの返り値の型であるlong double)としてコンパイルされる
- 型が間違えているので正しく代入されない
一方,
ポインタ渡しだとポインタのメモリサイズは同じで参照先のデータがa変数の型として解釈されたので正しく渡せたということかな
というのが事の真相みたいだね
ちゃんとwarning見れば
draw_function.c:64:7: warning: implicit declaration of function 'nextAction'; did you mean 'nextafterl'?
とあったので気づけたかもしれない...
(それにポインタ渡しの前に&で参照渡しを試してて関数定義がないってエラーの時点でもincludeされてないって気付けるチャンスはあったよね...)
size_t変数の初期化によるスタック領域の変更
キーボード入力の挙動がおかしいバグがあり、入力のコールバック関数keyboard()内にあるint rdxという変数の初期化を行っていなかったことが原因だとわかって解決したのですが、疑問があるのでうかがいたいです。
rdxはkeyboard()の最初で宣言されます。
int rdx;
この時点で何もしなければ32000程度の値が入っています。
キー「n」に次の処理が入っている場合、rdxには0が代入されていました。
case 'n':
//描画終了後, 保存した頂点を破棄する(modeに依らない)
if(line_flg == 0 && line_vec_num>0){
for (size_t i = 0; i < line_vec_num; ++i) {
line_vector[i] = (Vector){0, 0, 0};
}
line_vec_num=0;
// line_init();
break;
}
if文内の処理は別ファイルline.cでline_init()という関数にしてあり、処理内容自体は問題ないことを確認していますが、以下のように置き換えるとrdxは0になりませんでした。
case 'n':
//描画終了後, 保存した頂点を破棄する(modeに依らない)
if(line_flg == 0 && line_vec_num>0){
// for (size_t i = 0; i < line_vec_num; ++i) {
// line_vector[i] = (Vector){0, 0, 0};
// }
// line_vec_num=0;
line_init();
break;
}
調べた結果、keyboard()内の任意の場所でsize_t i = 任意の整数;を定義するとint rdx;の宣言直後からrdxの中身は0となっていました。これをkeyboard()の外に置くと効果はなく、関数line_init()内で定義した場合は、関数を同じファイルのkeyboard()内外に置いた場合もだめでした。
疑問点は次の2つです。
なぜsize_tを使うとintの初期化をしない場合でも0が代入されるのか。
nを入力せずif文がfalseでも問題なかったためコンパイル時の問題だとして、line_init()で上手くいかなかったのは関数とそれ以外のコンパイルで違いがあるからなのか。
アセンブラについて
- 関数の引数はintの場合edi, esi, edx, ecxの順にレジスタに入ると思うのですがkeyboard関数の使われていないedi には何か入っているのでしょうか
- shaking(), getWorldCood(), display()の最後の__stack_chk_fail は、関数内のどのような処理からスタック破壊の可能性があると判断されているのでしょうか
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.