创建结构体对象并将它们放入数组中

标签 c memory-management struct

我正在尝试解决我遇到的一个问题,该函数将创建一个新的结构对象,然后将其放入动态数组中。我尝试了多种变体,但我不断遇到各种问题。这就是我现在正在处理的问题,但我遇到了内存访问问题。

typedef struct  {
    int keynr;
    int access;
    time_t lastused;


} keycard;

void keyCreate(keycard *cardList, int keyid) {
    cardList[keyid].keynr = keyid + 100;
    cardList[keyid].access = 1;
    cardList[keyid].lastused = 0.0;
    }

int main () {
    keycard *cardList = 0;
    cardList = malloc(sizeof(keycard) * 1);
    keyCreate(&cardList, 0);
    printf("%d", cardList[0].access);

这段代码给了我:抛出异常:读取访问冲突。 卡列表为 0x64。

我已经阅读了很多有关指针和内存分配的内容,但显然我遗漏了一些东西..

最佳答案

如果你想动态添加新卡到数组中,你需要将其包装在另一个数据结构中:

typedef struct  
{
    int keynr;
    int access;
    time_t lastused;
} keycard;

typedef struct 
{
    keycard *keyarray;
    size_t size;
}keystorage;

int keyCreate(keystorage *cardList, size_t keyid) 
{
    if (cardList -> keyarray == NULL || keyid + 1 > cardList -> size)
    {
        keycard *new = realloc(cardList -> keyarray, sizeof(*(cardList -> keyarray)) * (keyid + 1));

        if(!new) return -1;   //error
        cardList -> keyarray = new;
        cardList -> size = keyid + 1;
    }

    cardList -> keyarray[keyid].keynr = keyid + 100;
    cardList -> keyarray[keyid].access = 1;
    cardList -> keyarray[keyid].lastused = 0.0;
    return 0; //OK
}




int main (void) {
    keycard key;
    keystorage cards = {NULL, 0};

    keyCreate(&cards, 500);
    printf("%d", cards.keyarray[500].access);

    return 0;
}

关于创建结构体对象并将它们放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993043/

相关文章:

c++ - 无法编译 MEX

c - 执行路径搜索?

c - 在 C 中取消引用指向不完整类型(具有明确定义的结构)的指针

xml - Go:将 XML 解码嵌套结构放入接口(interface){}中

比较两个不同长度的字符数组?

签名和未签名警告之间的比较

python - 如何强制 Python 字典缩小?

c - 调用 fopen 时的内存分配不明确

c++ - 使用 Boost 的 file_mapping 和 mapped_region 最小化内存使用?

ios - 无法在 Swift 中访问可编码的结构值