-3
A
答えて
2
まあ、コードがひどくtypedef
の乱用に難読化された事実は、おそらくあなたとコンパイラの問題の両方に向けて長い道のりを行きます。私は自分自身でこのプログラムに単一のtypedefを持っていないでしょう。ここでは実際の抽象化はありません。ここで私は(エラーチェックの一部省略して)ことをお勧めしたいものです。注意すべき
struct cache_line {
char valid;
mem_addr_t tag;
struct cache_line* next;
};
struct cache_line** cache;
void initCache()
{
cache = malloc (sizeof(*cache) * S);
for (int i = 0; i < S; i ++){
struct cache_line** curr_p = &cache[i];
for (int j = 1; j < E; j++){
*curr_p = malloc(sizeof(**curr_p));
(*curr_p)->valid = 0;
(*curr_p)->tag = 0;
(*curr_p)->next = NULL;
curr_p = &(*curr_p)->next;
}
}
}
主なもの:
私はすべてのtypedefを削除しました。彼らはここで本当の目的を果たしたのではなく、タイピングを助ける試みでした。そして、彼らはコード品質を犠牲にしてそれをやりました。私は前の声明もそれにも当てはまると信じているので、
struct
から削除しました。私は標準的にメモリを割り当てました。
malloc(sizeof(*pointer_variable))
を書くことで、pointer_variable
が何を指しているかにかかわらず、十分なメモリを割り当てます。それは幾分型にとらわれない。"リンクトラバーサル"イディオムでリンクリストをトラバースします。 「ノード」を追跡する代わりに、ノードを指しているポインタを追跡します。最初は
cache[i]
であり、繰り返しごとに新しく割り当てられたノード内のポインタになります。
関連する問題
- 1. Insure ++は、ヒープ上のC構造体の配列オーバーフローを検出しますか?
- 2. C/C++ qsort構造体内の構造体の配列
- 3. C構造体と配列
- 4. Cの構造体の動的配列の構造体の動的配列
- 5. 構造体の配列 - 構造体?
- 6. バイト配列のC++構造体をc#
- 7. 構造体のC配列のcythonメモリビュー
- 8. 構造体へのポインタのC配列
- 9. Cの構造体宣言の配列
- 10. 構造体、ポインタの配列[C++ Beginner]
- 11. 構造体の多次元配列C#
- 12. C - 構造体の動的配列
- 13. 構造体のC++多次元配列
- 14. ポインタ付きのC++構造体配列
- 15. Cでの構造体配列インデックス
- 16. 構造体の配列とmalloc [C]
- 17. 構造体配列の構造
- 18. 配列へのアクセス方法配列の内部構造C++の構造体?
- 19. スタック上のC++の構造体と配列、ヒープ、値、参照、参照解除の質問
- 20. C:関数内の構造体の内部構造体の配列へのポインタ
- 21. C#構造体の理解 - 構造体の配列の作成方法?
- 22. 入れ子構造体/リンクリスト@
- 23. 構造体の配列の配列
- 24. qsort構造体の配列の配列
- 25. テーブルビューの構造体配列
- 26. 構造体の配列 - ハッシュテーブル
- 27. 構造体内の配列
- 28. バイト配列をC#構造体にマーシャリング
- 29. C++ 2D構造体配列データ
- 30. C言語:構造体と配列
ポインタをtypedefingするのはとてもクールです...本当ですか? –
@SouravGhosh - 収入のセキュリティ。それは誰もがそれをデバッグするために立つことができないように1つのコードをとてもひどいものにします。 – StoryTeller
私は笑わない、骨格のコードはそのようになった、私はそれも本当に奇妙だと思った – genericmathstudent