LINUX.ORG.RU

malloc


0

0

Есть функция добавляющая в массв указателей на структуры новую ссылку на элемент:
int AddSpoolUnit(spool *p){
spool *new;
new=(spool *)malloc(sizeof(spool));
if(new==NULL){return NULL;}
p=new;
}

Но при выполнении следующего кода она вылетает с SIGSEGV
if(!AddSpoolUnit(p->SpoolArray[p->nFd]))
return -1;
p->SpoolArray[p->nFd]->in.sin_addr.s_addr=inet_addr(tmp);

anonymous

Странная функция. Единственным результатои ее работы является загрязнение памяти.

Она ничего не возвращает, spool *p - локальная пер-я; того, что ты ей нечто
присвоишь, никто не увидит после возврата из AddSpoolUnit.

Наверное, имелось в виду нечто типа:
spool * AddSpoolUnit(void){
return (spool *)malloc(sizeof(spool));
}
if(! (p->SpoolArray[p->nFd]=AddSpoolUnit()) )
return -1;
p->SpoolArray[p->nFd]->in.sin_addr.s_addr=inet_addr(tmp);
что сработает, но само по себе является глупостью (замени AddSpoolUnit()
на malloc()!).

Die-Hard ★★★★★
()

ну или хотя бы указатель на указатель передовать.

int AddSpoolUnit(spool **p){ blah-blah-blah *p = new; }

Dead ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.