可能的内存问题或其他什么?

时间:2017-08-21 06:28:50

标签: c arrays memory struct bin

我一直致力于一系列涉及结构,读取和写入bin文件的任务。

结构定义是:

struct Data{
    unsigned int a;
    unsigned short b;
    short c;
    char d[8];
    short e;
    int f;
    int g;
    short h; 
    char i;
    char j;
    unsigned long k;
    char l;
    double m;
    float n;
    int o;
    char p;
    double q;
}

我的阅读和打印程序似乎工作正常,代码是:

int main (int argc, char **argv){
    // Check correct number of args
    FILE *record = fopen(argv[1], "r")
    // More Prelim checks

    struct Data entry;

    /* if first field exists, task assumption is that all other fields
     *   must also exist with the proper sizes.
     */
    while(fread(&entry.a, sizeof entry.a, 1, record) > 0){
        fread(&entry.b, sizeof entry.b, 1, record);
        // ... read all fields one by one
        fread(&entry.q, sizeof entry.q, 1, record);
        printf("%u, %d, %d, %s, %d, %d, %d, %d, %c, %lu, %hhx, %f, %f, %d, %d, %f", 
                entry.a, entry.b, entry.c . . . entry.q);
    }
}

这会打印输入bin文件而不会出错(对15个文件自动测试,有些条目有数十个)。最简单的一个,只是一个条目,是enter image description here

但是,当我尝试存储所有数据以便对它们进行排序时,使用以下数组,数据正确启动,但就我所见,它完全变得混乱:

    struct Data *entries = NULL;
    int curEntries = 100;
    int counter = 1;
    entries = (struct Data *) malloc(curEntries * sizeof(struct Data));
    while(fread(&entries[counter - 1].a, sizeof entries[counter - 1].a, 1, record) >0){
        /* Same reading, storing and printing as above, then increment counter */
    }

enter image description here

由于读取和打印部分完全相同,除了使用“计数器”变量之外,我的问题是这里与数组内存有关,我需要修复什么?

1 个答案:

答案 0 :(得分:-1)

编辑:已解决。 实现是正确的,但许多关于格式和 使用变量非常有帮助。 问题是我必须编写代码的格式不同。