在 C 语言中使用带有结构和指针的 malloc



我对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是它的结束(...或者它可能在矢量中我想要的任何位置结束)

如果我尝试编译上面的代码,编译器会冻结。我没主意了。我做错了什么?:(

谢谢!

除了看起来很难阅读并且可能导致内存泄漏的代码之外,我将伸出脖子说这段代码应该在没有"冻结"的情况下运行。

根据您的问题,它在编译过程中冻结,这意味着您的编译器存在问题。虽然这可能与正在编译的代码有关,但编译器而不是代码需要修复。

如果您说错了并且在运行时发生冻结,那么您需要更仔细地分析冻结发生的位置,因为我不相信它仅在此代码中。如今,大多数编译器都带有调试器。通过学习使用它,你会帮自己一个大忙。

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

解决方案:你的编译器不好,换一个新的。

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

  • http://sourceforge.net/projects/mingw/files/

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

  • https://developer.apple.com/xcode/

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新