1

構造があるとします:

typedef struct
{
   int a;
   struct x;
   struct *x2;
   char *s;
}global_struct;

構造体のサイズに等しいメモリを指すポインタがあります:

ptr = calloc(sizeof(global_struct),1);

私は実際にはヒープにメモリを割り当てたくないので、構造体の変数を id として次のように宣言します。

global_struct var_struct1;

私はmemsetを使用してメモリをゼロに初期化しています。

memset(&var_struct1,0,sizeof(var_struct1))

これを行うと、コードでセグメンテーション違反が発生します。

なぜこれが失敗するのか、どのようなシナリオで失敗するのか、何らかの理由があるかどうかを知りたいですか?

4

2 に答える 2

3

calloc と memset でメモリをゼロにする方法に違いはありますか?

いいえ。実際、calloc は memset を内部的に呼び出している可能性があります。

なぜこれが失敗するのか、どのようなシナリオで失敗するのか、何らかの理由があるかどうかを知りたいですか?

いいえ。 calloc パラメータの順序が間違っていますcalloc(1, sizeof(global_struct));。この場合、実際にはパラメーターの順序は重要ではありません。

これを行うと、コードでセグメンテーション違反が発生します。

問題はコードの別の場所にある可能性があります。

于 2013-09-10T06:46:15.750 に答える