c - 指向不完整类型的指针的 vector 分配错误下标

标签 c arrays

我有我的产品

typedef struct proditem *prodItem;

我有一个产品符号表

typedef struct tabp *tabP;
struct tabp {
    prodItem vettP;
    int nP;
};

我需要分配内存, 然后:

tab->nP = max; // quantity of products
tab->vettP = malloc(max * sizeof(*prodItem));

但是如果尝试使用 vector 选项卡->vettP 则会出现错误:

tab->vettP[i] <<-- 指向不完整类型的指针的下标

谁能帮我吗?

最佳答案

我自己解决了,缺少一个指针*

typedef struct tabp *tabP;
struct tabp {
    prodItem *vettP;
    int nP;
};

产品项目.h:

#ifndef prodItem_h
#define prodItem_h

#include <stdio.h>
#include <stdlib.h>

typedef struct proditem *prodItem;
typedef char* prodKey ;

prodItem prodItemScan(FILE*);
void prodItemShow(FILE*, prodItem);
int prodItemCheckVoid(prodItem);
void prodItemFree(prodItem);
int prodItemGreater(prodItem,prodItem);

prodKey prodKeyGet(prodItem);
int prodKeyComp(prodKey, prodKey);
#endif /* prodItem_h */

符号表.h

#ifndef tabP_h
#define tabP_h

#include <stdio.h>
#include "proditem.h"

typedef struct tabp *tabP;

tabP tabPScan(FILE*);
void tabPShow(FILE*,tabP);

void tabPFree(tabP);
int tabPCount(tabP);
int tabPSearch(tabP, prodKey);

#endif /* tabP_h */

符号表.c

#include "tabP.h"

struct tabp {
    prodItem *vettP;
    int nP;
};

tabP tabPScan(FILE *f) {
    int max;
    fscanf(f,"%d", &max);
    tabP tab = malloc((sizeof(*tab)));
    tab->nP = max;
    tab->vettP = malloc(max * sizeof(prodItem));

    for(int i=0; i<max; i++) {
        tab->vettP[i] = prodItemScan(f);

    }

    return tab;
}

void tabPShow(FILE *f, tabP tab){
    for(int i=0; i<tab->nP; i++) {
        prodItemShow(f, tab->vettP[i]);
    }
}

int tabPCount(tabP tab) {
    return tab->nP;
}

int tabPSearch(tabP tab, prodKey key) {
    for (int i=0; i<tab->nP; i++) {
        if (prodKeyComp( prodKeyGet(tab->vettP[i]), key)==1){
            return i;
        }
    }
    return -1;
}

关于c - 指向不完整类型的指针的 vector 分配错误下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585552/

相关文章:

c++ - 将文件中的十六进制数转换为 ASCII

Cython:链接到库和调用函数

c - 如何使用 libogg 多路复用 Vorbis 和 Theora 流

java - 如何计算Hashmap数组中特定键的Hashmap出现次数?

c - 将函数返回的数组分配给c中的变量

javascript - 访问其定义中的数组项,相对索引

c - 使用 fscanf 和 while 循环来存储 char 和 int

c - 基于LCG的伪随机数发生器

arrays - 啪啪的解释

php - fatal error : Cannot use object of type stdClass as array