0
У меня очень странная проблема, когда попытка вызвать бесплатную выделенную часть памяти приводит к сбою моей программы.Вызов free() приводит к сбою моей программы
Вот соответствующий код:
int i, count;
char *specifier;
char aisle[1];
count = 0;
/*Find name of the new item and assign to the name field of new_node...*/
for (i = 0; input[i] != ','; i++){
count++;
}
specifier = (char*)malloc((count+1)*sizeof(char));
if (specifier == NULL){
printf("Out of memory. Shutting down.\n");
exit(EXIT_FAILURE);
}
for (i = 0; input[i] != ','; i++){
specifier[i] = input[i];
}
specifier[count+1] = '\0';
new_node->name = specifier;
printf("%s\n", new_node->name);
free(specifier); /*PROGRAM CRASHES HERE*/
printf("boom\n");
specifier = NULL;
/*Function continues here*/
это моя структура, которая используется для new_node:
/*Outline for the stock levels system...*/
typedef struct item item_t;
struct item{
char *name;
char *aisle;
item_t *left;
item_t *right;
};
Когда я запускаю программу, что первые PRINTF печатает правильно, но второй Безразлично» т. Есть идеи о том, почему?
Как вы распределяете 'new_node'? – timrau
@timrau new_node является частью двоичного дерева поиска и выделяется в другой функции. ('* new_node' передается в мою функцию выше как аргумент) – JavascriptLoser
Вы не указали это объявление, но если' new_node-> name' не является указателем, то 'new_node-> name = specifier;' собирается быть проблематичным, поскольку вы потеряете указатель на ранее выделенную память. – pedwards