任何人都知道以下C代码中的错误

时间:2013-02-12 13:32:21

标签: c

#include <stdio.h>
#include <stdlib.h>
main()
{
    typedef struct
    {
        int info;
        struct strc* next_ptr;
    }strc;
    strc* strcVar[5];
    strcVar = malloc(sizeof(strc) * 5);
    strcVar[0]->info = 1;
    printf(" All is well ");
}

6 个答案:

答案 0 :(得分:2)

strcVar是(本地)数组名称,您无法为其指定指针。你可能想要:

 strc* strcVar;
 ... /* and  later */
 strcVar[0].info = 1;

也许你想要一个指向struct strc的指针数组,然后Vaughn Cato的答案会有所帮助。

答案 1 :(得分:2)

这一行错误且不必要:

strcVar = malloc(sizeof(strc) * 5);

相反,您可以使用:

{
  int i=0;
  for (;i!=5; ++i) {
    strcVar[i] = malloc(sizeof(strc));
  }
}

答案 2 :(得分:2)

您无法从malloc分配数组 - 它是一个或另一个。如果你声明了一个包含五个指针的数组,那么它们的内存已经被分配了。如果必须使用malloc,请使用指向指针而不是数组的指针。否则,使用malloc分配单个项目,而不是数组:

strc* strcVar[5];
strcVar[0] = malloc(sizeof(strc));

答案 3 :(得分:2)

更改

 strc* strcVar[5];

 strc* strcVar;
 strcVar = malloc(sizeof(strc) * 5);
 strcVar[0].info = 1;

更改

strc* strcVar[5];
strcVar = malloc(sizeof(strc) * 5);
strcVar[0]->info = 1;

strc strcVar[5];
strcVar[0].info = 1;

答案 4 :(得分:1)

修复代码:

#include<stdio.h>
#include<stdlib.h>
void main()
{
    typedef struct
    {
        int info;
        struct strc* next_ptr;
    }strc;
    strc* strcVar;
    strcVar = malloc(sizeof(strc) * 5);
    strcVar[0].info = 1;
    printf(" All is well ");
}

答案 5 :(得分:0)

在任何数组中,基址是const指针。你无法改变它。

假设您有int [5];

这里是指向整个数组的基指针,不允许更改它。

这适用于所有阵列。