Я должен сохранить в массиве адрес некоторых данных.Каждые данные представляют собой структуру типа «dagNode».Чтобы выполнить свою работу, я захожу в список и подсчитываю количество данных, для которых я хочу записать его адрес, поэтому я выделяю нужное место в памяти, и, наконец, я снова посещаю список и сохраняю адрес некоторых данных.
struct dagNode *buildBST(struct dagNode *rootList){
struct dagNode *head, **xTest;
head = rootList;
int numXtest=0;
rootList = nextNode(TYPE_XTEST, rootList);
while ( !IS_TERMINATED( rootList ) ){ // first visit
numXtest++;
rootList = nextNode(TYPE_XTEST, rootList); }
xTest = (struct dagNode **) malloc( sizeof(struct dagNode ) * numXtest);
int i=0; rootList = nextNode(TYPE_XTEST, head);
for(i=0; i<numXtest; i++){ // second visit, saving the address of some datas
rootList = nextNode(TYPE_XTEST, rootList);
xTest[i] = rootList; i++;
>>> printf("t=%d,val=%d\t", xTest[i]->nodeType, xTest[i]->val); } // segmentation fault
return head;
}
РЕДАКТИРОВАТЬ:
struct dagNode *nextNode(int typeOfNextNode, struct dagNode *node){
if (IS_TERMINATED(node)){ return node; }
node = node->next;
if (typeOfNextNode == TYPE_EDGE_OR_GAP){
while (!IS_TERMINATED(node) && !IS_AN_EDGE(node) && !IS_A_GAP(node)){
node = node->next; }
}else
{
while (!IS_TERMINATED(node) && (node->nodeType != typeOfNextNode)){
node = node->next;}
}
return node; }