プロが教える店舗&オフィスのセキュリティ対策術

とあるソースを確認している時に下記のような記述を見つけました。

p = (uint8_t *)(uint8_t *)malloc( len );

これはどのように動作するんでしょうか?

p = (uint8_t **)malloc( len );

であれば二次元配列での領域確保だとは思いますが、
この後の処理を見る限りそのような感じで使用していないのです。

多分記述ミスかとは思いますが、
エラーも出ることなく動いているようなので、
free関数のところでもエラーにはなっていないようです。

単純に

p = (uint8_t *)malloc( len );

と同じ動作になるのでしょうか?

現在このソースでメモリリークが起こる場合があるようで、
その調査をしておりこのような処理を見つけた次第です。
(メモリリークは時間が経ってから出るようなので。。。)

この辺りが原因と言えるのかどうか
何か情報をお持ちの方いらっしゃいませんでしょうか?

よろしくお願いいたします。

A 回答 (4件)

タイプミスというか、コピペミスでしょうね。


同じ型に何回キャストしても結果が変わらないだけでエラーでは無いのでエラーにはなりません。
コーディングルールチェッカー的なプログラムだと警告を出すでしょうけど。

> と同じ動作になるのでしょうか?
そうです。

異なる似た例。別にエラーではないです。
x = abs(abs(abs(x)));
    • good
    • 0
この回答へのお礼

ありがとうございます。
キャストを重ねても結果は変わらないのですね。
多分単なる記述ミスだとは思っております。。。

お礼日時:2024/04/19 09:13

abs(abs(x)) に警告を出してくれるチェッカーは


ムヤミに優秀だなあ。
    • good
    • 0

p = (uint8_t *)(uint8_t *)malloc( len );



p = (uint8_t *)malloc( len );
と正確に同じ動作をする.

なぜ 2度もキャストするのかはさっぱりわからんけど.
    • good
    • 0
この回答へのお礼

ありがとうございます。
単純にコピペでのミスか何かだとは思っております。。。

お礼日時:2024/04/19 09:13

p = (uint8_t *)(uint8_t *)malloc( len ); は、


p = (uint8_t **)malloc( len ); じゃなく
p = (uint8_t *)malloc( len ); でしょ。

(uint8_t *)malloc( len ) の値である uint8_t 型の変数へのポインタを
左側の (uint8_t *) で何故かわざわざもう一度
uint8_t 型の変数へのポインタにキャストしてるだけだから。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おそらく単なる記述ミスだとは思っております。。。

お礼日時:2024/04/19 09:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています