なぜか、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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。