0
我试图使此代码工作,但我不明白为什么它崩溃。它应该从文件中读取数据,并将其按照向量排序(插入排序)。 proc是Process_t的一个向量,proc.name是一个char [10],proc [0]是在(硬编码)和num_proc == 1之前插入的。该文件的第一个寄存器被正确捕获,但之后崩溃在realloc()中)。Realloc:动态向量中的结构无效的下一个大小
size = 1
while(size > 0)
{
// Read a process from the config file and add to the vector in a sorted way
printf("%d\n", num_proc);
proc = realloc(proc, sizeof(Process_t)*num_proc);
printf("%d\n", num_proc);
size = fscanf(cfgfd, "%hhd %s\n", &hwmodid, buf);
printf("%d %d %s\n", num_proc, hwmodid, buf);
i = num_proc-1;
while(i > 1 && proc[i].hwmodid > hwmodid)
{
strcpy(proc[i+1].name, proc[i].name);
proc[i+1].hwmodid = proc[i].hwmodid;
proc[i+1].pid = proc[i].pid;
proc[i+1].fiforfd = proc[i].fiforfd;
proc[i+1].fifowfd = proc[i].fifowfd;
proc[i+1].paused = proc[i].paused;
--i;
}
strcpy(proc[i+1].name, buf);
proc[i+1].hwmodid = hwmodid;
proc[i+1].pid = -1;
proc[i+1].fiforfd = -1;
proc[i+1].fifowfd = -1;
proc[i+1].paused = 0;
++num_proc;
printf("%d %s %d %d %d %d %d\n", i, proc[num_proc-1].name, proc[num_proc-1].hwmodid, proc[num_proc-1].pid, proc[num_proc-1].fiforfd, proc[num_proc-1].fifowfd, proc[num_proc-1].paused);
}
在此之前你已经为'proc'分配了内存吗?或者将'proc'初始化为'NULL'? –
proc具有1个结构的大小。我刚刚意识到我在重新分配大小时错过了+1。愚蠢的错误是最难找到的。 – markmb
来自MAN的@JoachimPileborg:realloc()将ptr指向的内存块的大小更改为字节大小。内容将保持原有尺寸和最小尺寸的最小值;新分配的内存将被初始化。如果ptr为NULL,则对于所有大小的值,调用等价于malloc(size);如果size等于零,并且ptr不为NULL,那么调用等价于free(ptr)。除非ptr为NULL,否则它必须早先通过调用malloc(),calloc()或realloc()返回。如果指向的区域被移动,则完成一个空闲(ptr)。 NULL很好,单元化不好。 – Jekyll