2015-05-12 3 views
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 печатает правильно, но второй Безразлично» т. Есть идеи о том, почему?

+0

Как вы распределяете 'new_node'? – timrau

+0

@timrau new_node является частью двоичного дерева поиска и выделяется в другой функции. ('* new_node' передается в мою функцию выше как аргумент) – JavascriptLoser

+0

Вы не указали это объявление, но если' new_node-> name' не является указателем, то 'new_node-> name = specifier;' собирается быть проблематичным, поскольку вы потеряете указатель на ранее выделенную память. – pedwards

ответ

5

Вы выделить место для count + 1 элементов ...

specifier = (char*) malloc ((count+1) * sizeof(char)); 

А затем один мимо вашего массива (неопределенное поведение):

specifier[count + 1] = '\0'; 
Смежные вопросы