2016-08-15 21 views
1

所以我做了strucure:错误与使用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和logica lSize被更新。 当我第二次调用该函数时会出现问题:出现分段错误。我的猜测是,malloc的是不是做得很好,甚至尽管我看不到我应该改变什么:/

谢谢您的回答:)

注:第二个参数(ACHAT **表)是一个单独的数组,与表的地址一起传递。

回答

1

我怀疑,由多余的括号,你的错误在*(table)[logicalSize]
这会将table作为指向数组achat*的指针,当您的笔记指出它是指向指向数组achat的指针的指针时。

第二种解释将写入(*table)[logicalSize]

这里还有一个错别字:realloc(table, ...)应该是realloc(*table, ...)table(谢谢MikeCAT!)的其他用途一致。

请注意,请注意:don't cast the result of malloc:最好没有用处,最坏的情况是有害的。

+0

要添加,我猜'realloc()'的第一个参数应该是'* table',而不是'table'。 – MikeCAT

+0

@MikeCAT adadded,谢谢:) – Quentin

+0

谢谢你的回答, 关于realloc我相信你是对的,没有测试它,所以我没有看到它(thx :)) 并感谢昆汀我在malloc之前删除演员(很高兴知道它不好使用:3) –