-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

就像乔纳森伍德说的我认为你有一个糟糕的编译器,编译器永远不应该锁定或崩溃。编译器甚至不会运行您的代码,它会查看它以确保它没有任何问题。如果您的代码有问题并且编译器正常工作,它应该会为您吐出一个很好的错误。

解决方法:你的编译器坏了,换一个新的。

对于 Windows:MinGW(只是编译器,但很容易与 Eclipse 一起使用)

对于 mac:Xcode(IDE + 编译器)

希望这有帮助!

于 2012-12-10T00:28:24.433 回答