Avatar billede ultragames Nybegynder
21. oktober 2005 - 18:29 Der er 5 kommentarer

Problemer med pointere

Hvorfor får jeg fejl i mine pointer-for-løkke i linie 45 og 53?
-------------------------------------------------------
#include <stdio.h>
typedef struct node *nodeptr; //struct node kendes som nodeptr
  struct node{ //Struktur for node
      char *name;
      int grade;
      nodeptr *next;
  };
  nodeptr nodealloc(grade){
      struct node *tmp;
      tmp=(struct node *) malloc(sizeof(nodeptr));
      if (tmp == NULL){
        exit(1);
      }
      tmp->grade = grade;
      tmp->next = NULL;
  }

  nodeptr *head; //holder først adresse i linkedlist



  //head=&head
  //Omvendt udskrivning
  int count1;//Antal objekter i linkedlist
  int count2;//Position i linkedlist
  //int location;
  //Sortering
  /*nodeptr max_address;
  int max_position;
  nodeptr max_next;
  nodeptr tmp_head;
  */
main(){

}


void insert_node(struct node node){
      node.next = head;  //node peger på hvad head peger på
      head = *node.next; //head peger på node
  }

void printlist(nodeptr head){
  nodeptr *tmp;
  for(tmp=head;tmp->&next!=NULL;tmp=tmp->next){
      printf("%d",tmp->grade);
  }
}

int numobjects(nodeptr head){
  nodeptr *tmp;
  int count=0;
  for(tmp=head;tmp!=NULL;tmp=tmp->next){
      count1++;
  }
  return count;
}

noteptr gotoobject(nodeptr head,int location){
  nodeptr *tmp;
  int count=0;
  for(tmp=head;count<location;count2++){
      tmp=tmp->next;
  }
  return tmp;
}
void printlist_rev(nodeptr head,struct node tmp){
  for(location=numobjects(head);location>0;location--){
      tmp=mapobject(head,location);
      prinf("%d",tmp.grade);
  }
}
/*void grade_high(nodeptr head){
  //VARS---
  int max=0;
  //-------
  count2=0;
  for(tmp=head;tmp!=NULL;tmp->next){
      count2++;
      if(max<(tmp.grade)){
        max=(tmp.grade);
        max_address=tmp;
        max_position=count2;
        max_next=tmp->next;
      }
  }
}
void patch_list(nodeptr head){//fjerner maxobject fra orig. list.

}
void movetosorted(nodeptr head){

} */
void sort_list(nodeptr head){
  int count1=numobjects(head);//antal obj. gemmes i count1.
    //VARS---
      int max=0;
      nodeptr max_adress, max_next;
      int max_position;
      //-------
      int count2=0;
  for(count1>0;count1--){

      /*grade_high*/
            max=0;
            for(tmp=head;tmp!=NULL;tmp->next){/*problem med ptr=NULL*/
            count2++;
            if(max<(tmp->grade)){
                max=(tmp->grade);
                max_address=tmp;
                max_position=count2;
                max_next=tmp->next;
                }

      /*patch_list*/
      gotoobject(head,max_position-1)->next=max_next;

      /*movetosorted*/
        max_address=tmp;
        tmp->next=tmp_head;
        tmp_head=max_address;
  }
}
Avatar billede arne_v Ekspert
21. oktober 2005 - 18:36 #1
du kan ikke assigne en nodeptr til en nodeptr*
Avatar billede ultragames Nybegynder
21. oktober 2005 - 18:42 #2
Der kommer lige en update på source'n:
-----------------------------------------------------------------
#include <stdio.h>
typedef struct node *nodeptr; //struct node kendes som nodeptr
  struct node{ //Struktur for node
      char *name;
      int grade;
      nodeptr *next;
  };
  nodeptr nodealloc(grade){
      struct node *tmp;
      tmp=(struct node *) malloc(sizeof(nodeptr));
      if (tmp == NULL){
        exit(1);
      }
      tmp->grade = grade;
      tmp->next = NULL;
  }

  nodeptr *head; //holder først adresse i linkedlist



  //head=&head
  //Omvendt udskrivning
  int count1;//Antal objekter i linkedlist
  int count2;//Position i linkedlist
  //int location;
  //Sortering
  /*nodeptr max_address;
  int max_position;
  nodeptr max_next;
  nodeptr tmp_head;
  */
main(){

}


void insert_node(struct node node){
      node.next = head;  //node peger på hvad head peger på
      head = *node.next; //head peger på node
  }

void printlist(nodeptr head){
  nodeptr *tmp;
  for(tmp=head;tmp->&next!=NULL;tmp=tmp->next){
      printf("%d",tmp->grade);
  }
}

int numobjects(nodeptr head){
  nodeptr *tmp;
  int count=0;
  for(tmp=head;tmp!=NULL;tmp=tmp->next){
      count1++;
  }
  return count;
}

noteptr gotoobject(nodeptr head,int location){
  nodeptr *tmp;
  int count=0;
  for(tmp=head;count<location;count2++){
      tmp=tmp->next;
  }
  return tmp;
}
void printlist_rev(nodeptr head,struct node tmp){
  for(location=numobjects(head);location>0;location--){
      tmp=mapobject(head,location);
      prinf("%d",tmp.grade);
  }
}

-----------------------+
hvor assignes der noteptr = noteptr* ?
Avatar billede arne_v Ekspert
21. oktober 2005 - 18:43 #3
void printlist(nodeptr head){
  nodeptr *tmp;
  for(tmp=head;tmp->&next!=NULL;tmp=tmp->next){
      printf("%d",tmp->grade);
  }
}

int numobjects(nodeptr head){
  nodeptr *tmp;
  int count=0;
  for(tmp=head;tmp!=NULL;tmp=tmp->next){
      count1++;
  }
  return count;
}

tmp=head
Avatar billede ultragames Nybegynder
21. oktober 2005 - 18:49 #4
hvad gør jeg hvis jeg vil ha pointeren "tmp" til at pege på den næste adresse i listen node?
Avatar billede arne_v Ekspert
21. oktober 2005 - 18:52 #5
jeg har ikke sat mig ind i din program logik men det du assigner til tmp skal
have samme type som tmp

void printlist(nodeptr *head){
  nodeptr *tmp;
  for(tmp=head;tmp->&next!=NULL;tmp=tmp->next){

måske
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester