gpt4 book ai didi

c - 如何重置c中分配的内存和资源?

转载 作者:行者123 更新时间:2023-11-30 16:44:49 24 4
gpt4 key购买 nike

我的程序由一个菜单组成,您可以在其中选择 2 个选项之一。第二种就是直接退出程序。然而,第一个是您可以在包含 100.000 行的单独“.txt”文件中找到您选择的特定位序列。

它第一次执行我想要的操作,然后返回到菜单。

问题是当用户进行第二次(或更多)搜索时。该程序在屏幕上打印随机信息。看来我没有在第一次搜索时“重置”资源、内存或值。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{

char ID[8];
char content[2048];
int distance;

} DATA;

void search(){

FILE *f;
DADO *z=NULL;
long int tot=0;
int a;
int c;
int i;
int j=1;
int k=0;
char e;
char b[2048];

printf("\n");

f=fopen("DANGER_DB_LARGE.txt", "r");

printf("\n");
printf("How many results do you wish?\n");
scanf("%d",&a);

printf("Introduce the sequence:\n");
scanf("%s",b);
c=strlen(b);

printf("\n");

z=(DATA*)realloc(z,(++tot)*sizeof(DATA));

while(e!=EOF){
e=fgetc(f);

if(k<8){
z[tot-1].ID[k]=e;
}
else if(k==8 && e=='\t'){
continue;
}
else if(k>=9 && e!='\n'){
z[tot-1].content[k-9]=e;
}
else if(e=='\n'){
k=(-1);
z=(DATA*)realloc(z,(++tot)*sizeof(DATA));
}
k++;
}

for(i=1; i<=tot; i++){
distance(z,i,c,b);
}

free(z);
fclose(f);
}

我继续存储这 100.000 行文本中每一行的 ID 和内容。我通过执行 free(z) 来结束该函数,但是当我再次搜索时,程序只打印随机内容。

最佳答案

在没有中间赋值的情况下使用未初始化的变量是未定义的行为。 它可能会在每个月的第一个星期三工作,在第一次循环时,只有当老板正在寻找时,...

int e; // originally was char
//...
while (e != EOF) { // uninitialised, no intervening assignment

关于c - 如何重置c中分配的内存和资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44355171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com