私はこの問題を克服しました。文字列を構造体に変換する関数を実装しました。私はこのような構造を持っている:Cの構造体へのポインタのrealloc()
typedef struct {
unsigned a, b;
unsigned c, d;
} struct_t;
機能の見出しは以下の通りです:作成した新しい構造へのretval Pポインタ\
struct_t * string_to_struct (char * g)
。 \ retval変換に失敗した場合はNULLを返します。 "5 8 10 10"(私はsegmentation fault
エラーが出ています)のような文字列の変換は成功しませんが、 "5 6 6 7"や "4 5 6 8"などの文字列では成功します。私は問題が構造体pへのポインタのためのメモリの割り当て内にあると思う。 私が最初にこのようにpのメモリを割り当てることについて考え:
p = (struct_t*)malloc(sizeof(struct_t));
そして私は(一部の文字列は、約8バイトであり、すべてが正常に動作して文字列のための部屋作りに起因するPのためのメモリを再割り当てについて考えたが、文字列が約10バイトの場合は、segmentation fault
が得られます。上記のようにpのメモリを割り当てることで、8バイトの空き領域が確保されます)。realloc()
関数を使用して構造体を配置し、私はそれを正しく行う方法を知らない。
struct_t * string_to_struct (char * g){
struct_t * p; /* pointer to new structure*/
int n;
n = sizeof(g);
if(sizeof(g) > sizeof(struct_t))
p = (struct_t*)malloc(n*sizeof(struct_t));
else
p = (struct_t*)malloc(sizeof(struct_t));
if(g[0] == '\0') /* trivial */
return NULL;
else
(*p).a = g[0];
(*p).b = g[2];
(*p).c = g[4];
(*p).d = g[6];
if((*p).a <= (*p).c && (*p).b <= (*p).d) /* check, the elements of the structure must satisfy those relations.*/
return p;
else
return NULL; /* convertion not successful */
}
しかし、それは働いていない: ここでは、私がrealloc()
を使用していない、機能を実装しようとした方法です。助けを前にありがとう。
struct_t、no languageタグ(CまたはC++)、コードなし、実際の質問は定義されていません。申し訳ありませんが、これは本当に不明です*とすぐに閉鎖する可能性があります。 –
割り振り(不要なキャストは別)は問題ありません。このエラーは、解析中の可能性が最も高いです。 'string_to_struct'関数の全身を表示します。 – dbush
'sizeof(g)'は 'strlen(g)'と非常に異なります。 –