Я сохранил вершины в моем хранилище tempStorage:
typedef struct {
int pred[8];
int succ[8];
} arc_set;
arc_set tempStorage;
например .pred - 0,1,1,2,2, а .succ - 2,2,3,3,1
Я сделал char *links = malloc(sizeof(char) * 100);
, чтобы сохранить эти числа и напечатать их так:
char *temp = malloc(10);
for (int l = 0; l < 8; l++){
sprintf(temp, "%d-%d ", tempStorage.pred[l], tempStorage.succ[l]);
strcat(links, temp);
}
free(temp);
fprintf(stdout, "Solution %d edges: %s",countLinks, links);
fprintf(stdout, "\n");
хранит строки в формате "% d-% d" в temp с sprintf
, а затем с strcat
, сопоставляя это со ссылками.
он печатает все правильно, но когда я проверяю это с valgrind --leak-check=full --track-origins=yes -v ./programname
, я получаю:
Conditional jump or move depends on uninitialised value(s)
==12322== at 0x4C2C66A: strcat (vg_replace_strmem.c:307)
==12322== by 0x4013CC: main (program.c:251)
==12322== Uninitialised value was created by a heap allocation
==12322== at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
==12322== by 0x401270: main (program.c:225)
где c: 251 - strcat(links, temp);
, а c: 225 - мой char *links = malloc(sizeof(char) * 100);
я неправильно использую strcat или в чем здесь проблема?