我的程序包含一个菜单,您可以在其中选择2个选项中的一个。 第二个是退出该计划。但是,第一个是您可以在单独的" .txt"中找到您选择的特定位序列的位置。文件有100.000行。
它首次执行我想要的操作,然后返回菜单。
问题是当用户进行第二次(或更多次)搜索时。该程序在屏幕上打印随机信息。 好像我没有做过"重置"第一次搜索时的资源,内存或值。
#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)来结束这个功能,但是当我再次搜索时,程序只是打印随机的东西。
答案 0 :(得分:0)
Realloc按照
的方式返回voidvoid *realloc(void *ptr, size_t size)
加上它将一个指针作为输入,因此它通过引用传递。
更新:此函数返回指向新分配内存的指针,如果请求失败则返回NULL。
我的坏。
答案 1 :(得分:0)
使用未初始化的变量而没有介入的赋值是未定义的行为。 它可能在每个月的第一个星期三工作,第一次通过循环,只有在老板正在寻找时,......
int e; // originally was char
//...
while (e != EOF) { // uninitialised, no intervening assignment