首页 文章

如何动态分配内存到我的文件流?

提问于
浏览
0

我在CS类中有一个作业,其描述如下,但我很难动态分配内存,请帮助我,我今天必须提交我的代码 .

我的结构如下:

typedef struct sample{
 char* name;
 int list_len;
 float* value_list;
}sample;

我需要在读取文件时动态分配内存 .

将分隔的Sample数据记录的文件(在文本编辑器中创建 - pico)读取到指向样本结构的指针数组中 . 注意:您可以使用大小为1024的静态大小的数组,但是,数组的每个元素必须是指向样本结构的指针(如上所定义) . 最初,数组的每个元素必须设置为NULL(表示不使用它),然后再设置为动态分配的样本结构(如果要使用它) .

注意:在为示例结构动态分配内存之后,您可以为结构的每个/每个组件提供足够的内存 . 但是,对于作为指针的那个结构的每个组件,我最终还需要为它指向的“事物”分配内存(通过char *认为字符串,通过float *调用数组) . 在通过指向示例结构的指针释放内存时,您还必须记住这一点 .

到目前为止我有这个,我正在尝试使用strtok解析列表 .

void readfile(){
     int SIZE = 1024;
     sample* arr[SIZE] = {NULL};
     FILE* fin;
     sample* sample;     
     fin = fopen("sample.txt", "r");
     if (fin == NULL) {
         printf("sample.txt could not be opened"\n");
         exit(1);
     }
     else 
         fgets(arr, SIZE, fin);
         while(fin != EOF){
          sample = (sample*)malloc(sizeof(sample);
        }


 }

1 回答

  • 0

    只关注你的记忆问题并忽略代码中的所有其他错误:

    sample* arr[SIZE] = {NULL};
    

    所以你有一个指向 sample 的指针数组 . 以下语句将无法编译,因为 sample 不是变量,但是,您已关闭:

    sample = (sample*)malloc(sizeof(sample);
    

    您只需要一个读取行的缓冲区和一个变量来跟踪您在数组中的位置:

    int i= 0;
         char linebuf[1024];
         while (fgets(linebuf, 1024, fin) && i<SIZE) {
             arr[i]= malloc(sizeof(sample));
             // now parse the linebuf and fill arr[i] with it
             i++;
        }
    

相关问题