На RHEL6 у меня возникла странная проблема с realloc(). В какой-то момент в программе realloc() возвращает NULL (старый указатель имеет адрес и имеется доступная память). То, что выделяется, составляет 200 структурных элементов (структура ниже). По какой-то причине, когда я делаю realloc(), это работает, но я должен назначить старый указатель на новый. Ниже приведена упрощенная версия моего кода.Почему realloc() не работает, когда malloc() успешно работает в C?
Возможно, это проблема настройки сервера, а не программирующая. Каково твое мнение?
Спасибо.
//hearder file
typedef struct { /* Variable Node Detail Record */
long next;
long mask;
char *value;
// more stuff...
} NODETEST;
extern NODETEST *oldNodes;
extern NODETEST *newNodes;
//program
#define MAXSIZE 200
// do some stuff with oldNodes....
int alloc_nodes (void)
{
// Allocate or grow the table
oldNodes = (NODETEST *) malloc(MAXSIZE * sizeof(NODETEST));
if(oldNodes == NULL) {
//handle exception...
exit(1);
}
//oldNodes = (NODETEST *) realloc(oldNodes,MAXSIZE * sizeof(NODETEST)); // *** FAILS
newNodes = (NODETEST *) realloc(oldNodes,MAXSIZE * sizeof(NODETEST)); // *** WORKS
if(newNodes == NULL){
printf("errno=%d\n", errno);
}else{
oldNodes = newNodes; }
}
Использовать 'perror', когда' realloc' или 'malloc' (или' calloc') терпят неудачу. –
использовать 'perror' и показать нам, что он возвращает –
Работает ли' free' на старом указателе? – Marian