Я пишу программу, которая читает команды из текстового файла и создает adt на их основе. При отладке с помощью valgrind я получаю много ошибок, говорящих о том, что я использую унифицированные переменные. Один из которых выглядит следующим образом
Conditional jump or move depends on uninitialised value(s)
==5189== at 0x4838DD0: strcpy (vg_replace_strmem.c:512)
==5189== by 0x109A28: reduce_space (in /home/jacob/CIS2500/Ass/Ass4/a4q2)
==5189== by 0x10953A: main (in /home/jacob/CIS2500/Ass/Ass4/a4q2)
==5189== Uninitialised value was created by a heap allocation
==5189== at 0x483577F: malloc (vg_replace_malloc.c:299)
==5189== by 0x109925: reduce_space (in /home/jacob/CIS2500/Ass/Ass4/a4q2)
==5189== by 0x10953A: main (in /home/jacob/CIS2500/Ass/Ass4/a4q2)
Эта ошибка, похоже, указывает на функцию redu_space:
char* reduce_space(char** string){
char* input = malloc(sizeof(char)*BUFFER);
char* new=malloc(sizeof(char)*BUFFER);
strcpy(input, *string);
int space = 0;
int i = 0;
int j = 0;
int count = 0;
while(input[i]!='\0'){
if(input[i]==32){
j=i+1;
if(input[j]!='\0'){
while(input[j]==32&&input[j]!='\0'){
i++;
j++;
}
}
}
new[count]=input[i];
i++;
count++;
}
new[i]='\0';
strcpy(*string, new);
free(input);
free(new);
return(*string);
}
Я не совсем понимаю, где находится неинициализированная переменная. Я объявляю input
и new
неправильно?
Пример того, как это называется:
#include "header.h"
int main(){
int i;
FILE* input = fopen("inputfile.input", "r");
int max = file_size(input);
char** command = malloc((sizeof(char*)) * max);
for(i=0;i<max;i++){
command[i] = malloc((sizeof(char))*BUFFER);
fgets(command[i], BUFFER, input);
}
i = 0;
while(command[i][0]!='\0'){
reduce_space(&command[i]);
i++;
}
return(0);
}