メインコンテンツ

MISRA C:2023 Rule 11.5

A conversion should not be performed from pointer to void into pointer to object

R2024a 以降

説明

ルール定義

A conversion should not be performed from pointer to void into pointer to object 1 .

根拠

void へのポインターがオブジェクトへのポインターにキャストされる場合、結果のポインターは正しく配置されない可能性があります。不適切なアライメントは未定義の動作を発生させます。ただし、メモリ割り当て関数を使用するときなど、そのようなキャストが必要な場合もあります。

Polyspace 実装

NULL または (void*)0 からのキャストまたは暗黙的な変換は警告を生成しません。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

void foo(void) {

    unsigned int  u32a = 0;
    unsigned int  *p32 = &u32a;
    void          *p;
    unsigned int  *p16;

    p   = p32;                /* Compliant - pointer to uint32_t 
                               *            into pointer to void */
    p16 = p;                  /* Non-compliant */

    p   = (void *) p16;       /* Compliant */  
    p32 = (unsigned int *) p; /* Non-compliant */  
}

この例では、void* 型のポインター p が他の型へのポインターにキャストされる場合、ルールに違反します。

void 型へのポインターである p16p32void* にキャストされる場合、ルールに違反しません。

チェック情報

グループ: Pointer Type Conversions
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2024a で導入

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.