我对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/
希望这有帮助!