这适用于C语言和ubuntu。
我目前陷入了这个问题:
struct dretva {
int id;
int p;
int prio;
int rasp;
};
struct dretva *P[5];
int nove[6][5] =
{
{ 1, 3, 5, 3, 1 },
{ 3, 5, 6, 5, 1 },
{ 7, 2, 3, 5, 0 },
{ 12, 1, 5, 3, 0 },
{ 20, 6, 3, 6, 1 },
{ 20, 7, 4, 7, 1 },
};
我如何为P增加价值? 我是这样做的:
P[0]->id=nove[0][2];
但是当我用printf这样写它时:
printf("%d",P[0]->id);
它表示Segmention fault(核心转储),这意味着P [0] - > id没有值。怎么样?如何为P [0] - > id?
添加值谢谢。
答案 0 :(得分:3)
为这些结构指针分配内存后,您可以添加添加或提及的方式。
如果你使用指针,你需要给它一些内存,你可以指向...
现在你因此而得到错误..(没有分配内存) 添加此行并使用值启动它们。
for(int i=0;i<5;i++)
P[i]=malloc(sizeof(struct dretva));
4386427指出的简单方法
struct dretva *P = malloc(5 * sizeof(struct drevta));
if (P == NULL) {
exit(1);
}
以后释放记忆的好习惯。
答案 1 :(得分:1)
分配struct
而非指向struct
的指针,如下所示:
struct dretva P[5];
// ^
// no asterisk
P[0].id=nove[0][2];
// ^
// dot in place of ->
目前,您分配的指针未设置为指向实际的struct
,因此读取或写入指针是未定义的行为。