私の古いコードと、Cの文字列のmalloc()を初期化する方法を見直しています。malloc中にsize_tをキャストして、C言語のchar *配列を初期化しようとしました
私の現在のスタイルは、charのsize_tを取得し、それを複数の値で取得することです。たとえば、次のように私の古いコードは、私はちょうど私が代わりに私が
char *string = malloc((size_t)PATH_MAX + 1);
私は以来を使用
char *string = malloc(sizeof(char) * PATH_MAX + 1);
を使用するなど、欲しかった値にsize_t型の値をキャストしかし
#include <stdlib.h>
#include <limits.h>
int main(int argc,char **argv)
{
char *string = malloc(sizeof(char) * PATH_MAX + 1);
/* do stuff */
free(string);
return somevalue;
}
文字配列の割り当てmallocはデータ型の値をとり、それを適切なバイトサイズとして使用して、前の2つの文を類似させるか、または与えられた仮定でバッファオーバーフローの偶発的な機会を作ります"string"に入れる文字列がPATH_MAXのサイズよりも小さいことを示します。
'malloc(PATH_MAX + 1)'は最も簡単です –
数KBを動的に割り当てるのではなく、 'char string [PATH_MAX + 1];'(@MM - これはもっと簡単です;-))今日のシステムでは、数KBのデータがスタックに簡単に収まります。ヒープの代わりにスタックを使用するマルチスレッドプログラムでは、ヒープの競合を完全に回避するという2つの利点があります。数KBのデータがあなたのスタックにとって大きすぎるプラットフォーム用にプログラミングしているのであれば、すでに知っているはずです。 –