0
typedef struct abc {
  unsigned int pref;
  unsigned int port;
  char *aRecordIp;
    int index;
    int count;
}abc_t;

typedef struct xyz {
        abc_t *ab;
        int index;
        int count;
}xyz_t;


int Lookup (char *lookup,xyz_t **handle) {

*handle = (xyz_t *)malloc(sizeof(xyz_t *));
(*handle)->ab = (abc_t *) malloc(5*sizeof(abc_t *));
//
(*handle)->ab[0].pref = 10;  //seg fault here
}


void *myhandle; 

// これは void ポインターであり、他の場所でも使用されているため変更できません

char lookup;


Lookup(&lookup, &myhandle);

// ここで警告が表示されますが、これは明らかですが、どうすれば対処できますか

4

3 に答える 3

1

そのエラーは、ptr = malloc (count * sizeof *ptr);表記を好む正当な理由です。コンパイラはすでに式の型とサイズを認識しているため、再度指定する必要はありません

int Lookup (char *lookup,xyz_t **handle) {

  *handle = malloc(sizeof **handle);
  (*handle)->ab = malloc(5 * sizeof *(*handle)->ab );
  (*handle)->ab[0].pref = 10;  //seg fault here
}

または、配列表記を使用して(醜いを避けるためだけに*(*handle)):

int Lookup (char *lookup,xyz_t **handle) {

  *handle = malloc(sizeof **handle);
  (*handle)->ab = malloc(5 * sizeof (*handle)->ab[0] );
  (*handle)->ab[0].pref = 10;  //seg fault here
}

注: 不要で潜在的に危険なキャストも削除しました。

また、この文体の修正により、両方のエラーが修正されることに注意してください。

于 2013-09-11T16:23:44.707 に答える
1

(abc_t *) malloc(5*sizeof(abc_t *));する必要があります(abc_t *) malloc(5*sizeof(abc_t));。5 つの構造体のスペースではなく、5 つのポインターのスペースを要求しています。

于 2013-09-11T15:58:52.627 に答える
1
(*handle)->ab = (abc_t *) malloc(5*sizeof(abc_t *));

おそらく次のようになります。

(*handle)->ab = (abc_t *) malloc(5*sizeof(abc_t));

void*ただし、C では、あらゆる種類のポインターに暗黙的にキャストするため、そのキャストは必要ありません。

(*handle)->ab = malloc(5*sizeof(abc_t));

で十分です。

mallocまた、すべての呼び出しの戻り値を確認してください。

于 2013-09-11T15:58:39.727 に答える