c - 使用 malloc() 分配内存时出错,只能向表中添加一项

标签 c arrays malloc

所以我得到了一个结构:

typedef struct Achat {
    char aAcheter[25];
    double quantite;
    double prixUnitaire;
    categorie rayon;
} achat;

两个静态整数:

static int physicalSize = 0;
static int logicalSize = 0;

还有一个函数:

int ajout (achat a, achat **table){
        if (physicalSize == 0){
                if ((*table = (achat *) malloc (5 * sizeof(achat))) == NULL){
                        perror ("malloc error");
                        return -1;
                }
                physicalSize = 5;
        }

        if (logicalSize == physicalSize){
                if ((*table = (achat *) realloc(table, (physicalSize *= 2) * sizeof(achat))) == NULL){
                        perror("realloc error");
                        return -1;
                }
        }

        *(table)[logicalSize] = a;
        logicalSize++;
        return logicalSize;
}

基本上,当我第一次调用函数时一切正常,项目被添加到表中并且 physicalSize 和 logicalSize 都被更新。 当我第二次调用该函数时出现问题:出现段错误。我的猜测是 malloc 做得不好,即使我看不出我应该改变什么:/

感谢您的回答:)

nb:第二个参数 (achat **table) 是一个数组,与表的地址一起传递。

最佳答案

我怀疑,由于多余的括号,您的错误在于 *(table)[logicalSize]
这将 table 视为指向 achat* 数组的指针,当您的注释声明它是指向指向 achat 数组的指针时>.

第二种解释会写成(*table)[logicalSize]

这里还有一个错别字:realloc(table, ...) 应该是 realloc(*table, ...) 以与其他用法保持一致table(感谢 MikeCAT!)。

旁注,请don't cast the result of malloc : 它充其量是无用的,而在最坏的情况下是有害的。

关于c - 使用 malloc() 分配内存时出错,只能向表中添加一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38958725/

相关文章:

sql - 在非过程语言中,什么规定了如何做事?

c - 如何获取行数导致 SQL (C ANSI) 中的查询?

c - 在 ncurses 中实现文本滚动的推荐方法是什么?

传递给具有不同签名的函数的数组

c - Malloc 没有分配我告诉它的那么多内存(我相信)

c - 红黑树 "correction"期间的段错误(核心已转储)- C

c - 我需要做什么才能使 bubbleSort() 全局修改数组值?

通过Android模拟器无法读取但可以写入串口

arrays - 数组中所有可能的元素对的总和

javascript - 使用 javascript 比较两个数组并查找每个值的计数