所以我得到了一个结构:
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/