gpt4 book ai didi

c++ - C 取消引用指向不完整类型的指针时出错

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:11 25 4
gpt4 key购买 nike

我的主文件有一些问题。我有一个结构矩阵(理论上),我想修改所有结构中的所有“p”参数。这是主文件:

int main(int argc, char** argv) {
int i, j;

struct PQ *queue;
queue = createQ(5);
for (i = 0; i <= 5; i++) {
for (j = 0; j = 20; j++);
queue->mem[i][j].p = 1;
}

for (i = 0; i <= 5; i++) {
puts("\n");
for (j = 0; j <= 20; j++);
printf("%d ",queue ->mem[i][j].p);
}


return (EXIT_SUCCESS);
}

这是另一个包含结构定义和生成函数的文件:

typedef struct newLine{
unsigned p;
} newLine;


struct PQ{
struct newLine ** mem;
};

struct PQ *createQ(unsigned min){
int i=0;
struct PQ *newQ = malloc(sizeof(PQ));
newQ->mem = malloc(min*sizeof(newLine *));

for(i=0;i<=min;i++){
newQ->mem[i]=calloc(20,sizeof(newLine));
}

return newQ;
}

有什么想法吗?

最佳答案

您看到错误是因为 struct 是 C 中类型的一部分,所以您必须在 struct PQ 中使用 struct newline。另一种方法是使用 typedef 创建类型别名:

typedef struct newline {
int p;
} newline;

访问结构成员的方法是使用 .在结构上,在指向结构的指针上使用 ->,因此请改用 queue->mem[i][j].p

还有其他问题。

你不能解引用一个未初始化的指针,它会产生未定义的行为:

PQ *newQ;

应该是:

struct PQ *newQ = malloc(sizeof(struct PQ));

你应该使用正确的间接分配:

newQ->mem = malloc(min * sizeof(newline*));
for(int I = 0;i < min; i++){
newQ->mem[i] = calloc(20, sizeof(newLine));
}

关于c++ - C 取消引用指向不完整类型的指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com