-1

私はCが初めてで、構造体とポインターでのmalloc()の使用を理解しようとしています。ここに私が書こうとしているプログラムのスニペットがあります

typedef struct
{
    char *id;
    char *ocup;
    char cj[15]; //data to fill the vector
} T1;

typedef struct
{
    T1 *a1;
    T1 *a2;
} T2;

T2* Aloc(int mp)
{
    T1 *p,*s;

    T2 *af = (T2*)malloc(sizeof(T2));
    if(af == NULL)
        return 0;
    af->a1 = (T1*)malloc(sizeof(T1) * mp);
    if(af->a1 == NULL)
        return 0;
    // trying to go through the freshly created vector
    // but without success 
    for(p = af->a1, s = p + mp; p < s; p++)
        af->a2 = p;
    return af;
}

// mp = size of the struct

T1 *a1ベクトルの開始アドレスです。

T2 *a2それの終わりです(...または、ベクトル内のどこでも終了する可能性があります)

上記のコードをコンパイルしようとすると、コンパイラがフリーズします。私はアイデアを使い果たしました。私は何を間違っていますか?:(

ありがとう!

4

2 に答える 2

1

非常に読みにくく、メモリリークが発生する可能性のあるコードを除いて、首を突き出して、このコードは「フリーズ」せずに実行する必要があると言います。

あなたの質問によると、コンパイル中にフリーズします。これは、コンパイラに問題があることを意味します。これはコンパイル中のコードに関連している可能性がありますが、コードではなくコンパイラーに修正が必要です。

ミスポークして実行時にフリーズが発生した場合は、このコードだけでフリーズが発生しているとは思わないため、フリーズが発生している場所をより注意深く分析する必要があります。最近のほとんどのコンパイラにはデバッガが付属しています。あなたはそれを使うことを学ぶことによってあなた自身に大きな恩恵を与えるでしょう。

于 2012-12-09T19:12:02.223 に答える
0

Jonathan Wood が言ったように、あなたのコンパイラは悪いと思いますが、コンパイラはロックアップしたりクラッシュしたりしてはいけません。コンパイラはコードを実行することさえしません。コードを調べて、問題がないことを確認します。コードに問題があり、コンパイラが正常に動作している場合、適切なエラーが出力されるはずです。

解決策: コンパイラが悪いので、新しいものを入手してください。

Windows の場合: MinGW (単なるコンパイラですが、Eclipse では非常に使いやすい)

Mac の場合: Xcode (IDE + コンパイラ)

これが役に立ったことを願っています!

于 2012-12-10T00:28:24.433 に答える