なぜか、malloc()だか、そのfree()だかわからないけど、エラーが出ていた。
サイズが足りないのにアクセスしたような感じのエラーだ。
確保するサイズは、sizeof()で求めていた。
TLVじゃないけど、Length + Valueをいくつかつなげたようなサイズを確保したかったのだ。
Lengthは1byte分で、uint8_t型。
その箇所は、uint64_t型をValueに取りたかったので、こんな感じで書いていた(つもりだった)。
int length = sizeof(uint8_t) + sizeof(uint64_t);
しかし、私は最初の方にsizeofを書き忘れていたのだった。。。
int length = (uint8_t) + sizeof(uint64_t);
驚いたことに、これがコンパイルエラーにはならないのだ。
-Wや-Wallつけてるのに、warningも出ない。
01: #include <stdio.h> 02: #include <stdint.h> 03: 04: int main(void) 05: { 06: int length = (uint8_t) + sizeof(uint64_t); 07: printf("len=%d\n", length); 08: }
なんとなく想像がつくだろうが、この結果は「8」だ。
"+sizeof(uint64_t)"をuint8_tでキャストしたことになったのだろう。
なかなか気付きませんでしたなぁ。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。