C言語学習ポータル(無料版) 学習コンテンツ 関数リファレンス ckd_mul

🔧 C23 ・ stdckdint.h ・ C23

ckd_mul の使い方

C言語 標準ライブラリ関数リファレンス(無料公開)

書式

bool ckd_mul(type1 *result, type2 a, type3 b);

どんな関数か

整数の乗算をオーバーフローの有無を検出しながら実行するC23の型総称マクロ。配列サイズなどの計算でオーバーフローすると重大な脆弱性になりやすいため、安全な掛け算に使う。 特にヒープ確保のサイズ計算では、この関数によるチェックを怠ると整数オーバーフロー脆弱性に直結しやすい。

使用例

#include <stdckdint.h>
#include <stdio.h>
int main(void) {
    size_t result;
    bool overflow = ckd_mul(&result, (size_t)100000, (size_t)100000);
    printf("%d %zu\n", overflow, result);
    return 0;
}

つまずきやすい注意点

⚠️ malloc(n * size)のようなサイズ計算のオーバーフローは古典的な脆弱性の原因。この関数でチェックしてから確保するのが安全。trueが返ったときは、resultに入っている値を計算結果として使わない。

アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ

ckd_mul と一緒に使う関数

ckd_add整数の加算をオーバーフローの有無を検出しながら実行するC23の型総称マクロ。結果をresultへ格納し、オーバーフローし… ckd_sub整数の減算をオーバーフローの有無を検出しながら実行するC23の型総称マクロ。ckd_addと同じ使い方で、結果とオーバー… malloc指定バイト数のメモリ領域をヒープから動的に確保し、先頭アドレスを返す。確保した内容は初期化されない(不定値)ため、必要な…

同じ分類(C23)の関数

ckd_add ckd_sub free_aligned_sized free_sized stdc_bit_ceil stdc_bit_floor stdc_bit_width stdc_count_ones stdc_count_zeros stdc_has_single_bit stdc_leading_zeros stdc_trailing_zeros strndup

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る