Как правильно использовать скрипт c для сохранения пользовательского struct
в виде двоичного файла и чтения его из другого c сценария?
Есть два раздела кодов ниже. Save struct section
создает и сохраняет пользовательскую структуру в виде двоичного файла. Read struct section
пытается прочитать двоичный файл.
Если я запускаю весь сценарий с обоими разделами, раздел чтения получает структуру очень хорошо. Тем не менее, если я закомментирую read section
и просто сначала запускаю save section
, а закомментирую save section
и просто потом запускаю read section
. Он сломался и дал ошибку сегментации.
#include <stdio.h>
#include <stdlib.h>
struct Case_dict {
int full_circ_size;
int num_clusters;
int *cluster_circ_sizes;
struct Cluster *all_cluster_prob;
};
struct Cluster {
int cluster_idx, num_instance, num_qubits;
struct Instance *instances;
};
struct Instance {
int cluster_idx, instance_idx;
int *init, *meas;
};
int main(int argc, char *argv[])
{
// Save struct section
int *init = malloc(4*sizeof(int));
init[0] = 0;
init[1] = 1;
init[2] = 2;
init[3] = 3;
int *meas = malloc(4*sizeof(int));
meas[0] = 4;
meas[1] = 5;
meas[2] = 6;
meas[3] = 7;
struct Instance *instance = malloc(sizeof(struct Instance));
instance->cluster_idx = 3;
instance->instance_idx = 3;
instance->init = init;
instance->meas = meas;
struct Cluster *cluster = malloc(sizeof(struct Cluster));
cluster->cluster_idx = 3;
cluster->num_instance = 5;
cluster->num_qubits = 10;
cluster->instances = instance;
printf("Finished building struct Cluster\n");
FILE *output_fptr = fopen("test.bin","wb");
fwrite(cluster, sizeof(struct Cluster), 1, output_fptr);
fclose(output_fptr);
printf("Finished writing binary\n");
// Read struct section
struct Cluster cluster_2;
FILE *input_fptr = fopen("test.bin","rb");
fread(&cluster_2, sizeof(struct Cluster), 1, input_fptr);
fclose(input_fptr);
printf("cluster_idx = %d, %d instances, %d qubits\n",cluster_2.cluster_idx,cluster_2.num_instance,cluster_2.num_qubits);
struct Instance *instances_2 = cluster_2.instances;
int i;
printf("Instance %d of cluster %d\n",instances_2[0].instance_idx,instances_2[0].cluster_idx);
printf("init_meas: ");
for (i=0;i<4;i++) {
printf("%d ",instances_2[0].init[i]);
}
for (i=0;i<4;i++) {
printf("%d ",instances_2[0].meas[i]);
}
printf("\n");
return 0;
}