0
#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 ");
}
4

6 回答 6

2

strcVar是一个(本地)数组名称,您不能为其分配指针。你可能想要:

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

也许您想要一个指向 的指针数组struct strc,那么 Vaughn Cato 的回答会有所帮助。

于 2013-02-12T13:34:44.020 回答
2

此行是错误且不必要的:

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

相反,您可以使用:

{
  int i=0;
  for (;i!=5; ++i) {
    strcVar[i] = malloc(sizeof(strc));
  }
}
于 2013-02-12T13:34:44.357 回答
2

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

strc* strcVar[5];
strcVar[0] = malloc(sizeof(strc));
于 2013-02-12T13:35:11.613 回答
2

Change

 strc* strcVar[5];

to

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

OR

Change

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

to

strc strcVar[5];
strcVar[0].info = 1;
于 2013-02-12T13:37:45.920 回答
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 ");
}
于 2013-02-12T13:37:31.253 回答
0

在任何数组中,基地址都是一个 const 指针。你不能改变它。

假设如果你有 int a[5];

这里 a 是整个数组的基指针,你不能改变它。

这适用于所有数组。

于 2013-02-12T15:37:55.633 回答