C:动态分配的结构数组使用

时间:2015-03-20 03:32:37

标签: c arrays linux dynamic struct

获取诸如此类的错误 stats.c:28:36: error: ‘factoryStats’ has no member named ‘candyConsumed’ factoryStatsArray[producer_number].candyConsumed++; 我希望能够实现的是创建一个结构数组,然后访问它的成员。这是错误的做法吗?

尝试使用->,但由于我存储的是结构,而不是指向结构的指针,因此不应该也不会有效。

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

typedef struct {
    int factoryNumber = 0;
    int candyProduced = 0;
    int candyConsumed = 0;
    double minDelay = 0;
    double avgDelay = 0;
    double maxDelay = 0;
} factoryStats;

factoryStats *factoryStatsArray;
int NUM_FACTORIES = 0;

void stats_init (int num_producers) {
    factoryStatsArray = malloc(sizeof(factoryStats) * num_producers);
    NUM_FACTORIES = num_producers;
}
void stats_cleanup (void) {
    free(factoryStatsArray);
}
void stats_record_produced (int factory_number) {
    factoryStatsArray[factory_number].candyProduced++;
}
void stats_record_consumed (int producer_number, double delay_in_ms) {
    factoryStatsArray[producer_number].candyConsumed++;
    if (factoryStatsArray[producer_number].minDelay == 0) {
        factoryStatsArray[producer_number].minDelay = delay_in_ms;
    } else {
        if (factoryStatsArray[producer_number].minDelay > delay_in_ms) {
            factoryStatsArray[producer_number].minDelay = delay_in_ms;
        }
    }
    if (factoryStatsArray[producer_number].maxDelay == 0) {
        factoryStatsArray[producer_number].maxDelay = delay_in_ms;
    } else {
        if (factoryStatsArray[producer_number].maxDelay < delay_in_ms) {
            factoryStatsArray[producer_number].maxDelay = delay_in_ms;
        }
    }
    factoryStatsArray[producer_number].avgDelay+= delay_in_ms;

}
void stats_display(void) {
    printf("%8s%10s%10s10s10s10s\n", "Factory#", "#Made", "#Eaten", "Min Delay[ms]", "Avg Delay[ms]", "Max Delay[ms]");
    for (int i = 0; i < NUM_FACTORIES; i++) {
            printf("%8d%8d%8d%10.5f%10.5f%10.5f",
                    factoryStatsArray[i].factoryNumber, factoryStatsArray[i].candyProduced,
                    factoryStatsArray[i].candyConsumed, factoryStatsArray[i].minDelay,
                    factoryStatsArray[i].avgDelay/factoryStatsArray[i].candyConsumed,
                    factoryStatsArray[i].maxDelay);

    }
}

1 个答案:

答案 0 :(得分:0)

结构不能以这种方式初始化。移除= 0中的所有typedef struct { ... } factoryStats;。然后它按照http://ideone.com/uMgDzE编译。