1

このプログラムでは、配列ではなく要素をリストに入れたいと思います。そして最後にリストを印刷します。

例えば。サイモン22スージー24
..。

ただし、リストを操作する方法と、ヒープを構築して取得する方法を本当に理解していません。私はそれを行う方法についていくつかの研究をしました。そして、これが私が思いついたものです。そして、エラーのいくつかが出てきて、私は修正する方法がわかりません。

error: 'ptr' undeclared (first use in this function)
arrays.c:37:5: note: each undeclared identifier is reported only once for each function     it appears in
arrays.c: In function 'main':
arrays.c:62:9: error: expected identifier or '(' before '=' token
arrays.c:69:5: warning: passing argument 1 of 'insert' from incompatible pointer type
arrays.c:28:13: note: expected 'struct Record *' but argument is of type 'struct Record **'

#include <stdio.h>
#include <stdlib.h>


/* these arrays are just used to give the parameters to 'insert',
   to create the 'people' array */
char *names[7]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
          "Harriet"};
int ages[7]= {22, 24, 106, 6, 18, 32, 24};


/* declare your struct for a person here */
/* */
typedef struct Record{
    char *names;
    int ages;
    struct Record *next;
}  Record;

char getname(Record *names){
    return names;
}

int getage(Record *ages){
    return ages;  
}

static void insert (Record *p, char *s, int n) {

//p[(*)] = malloc(sizeof(person));

/*static int nextfreeplace = 0;*/
    Record *headptr = NULL;

    while(!reached_eof(p)){

/* allocate heap space for a record */
        ptr =(Record*) malloc(sizeof(Record));

        if(ptr == NULL){  
            abort();
            printf("memory allocation fail"); 
            exit(1);  
        }
        else{
            printf("memory allocation to person  - %s - \n", s);      
        }

        ptr->name = getname(p);
        ptr->age = getage(p);

        /* link new object into the list */
        ptr->next = headptr;
        headptr = ptr;

    }
}       


int main( int argc, char **argv) {

    /* declare nextinsert */
    int  = 0;            

    /* declare the people array here */
    Record *p, *headptr;
    headptr = NULL;

    //insert the members and age into the unusage array. 
    for ( int i=0 ; i < 7; i++) {
        insert (p, names[i], ages[i]);

        /* do not dereference the pointer */
    }

    /* print out a line before printing the names and ages */
     printf("\n");


    /* print the people array here*/
    for (int i=0; i < 7; i++) {
        printf("The name is: %s, the age is:%i\n", p[i]->names, p[i]->ages);
    }


    /* This is the third loop for call free to release the memory allocated by malloc */
    /* the free()function deallocate the space pointed by ptr. */
    for(int i=0; i<7;i++){
        free(p[i]);
    }
}
4

2 に答える 2

3

初めに

次のコードは奇妙です

char getname(Record *names){
  return names;
}

int getage(Record *ages){
  return ages;  
}

上記の機能は実際には必要ないと思います。

これらの行でさえ

ptr->name=getname(p);
ptr->age=getage(p);

あなたはそれらを再レースすることができます

ptr->name=s;
ptr->age=n;

次の関数には、多くのエラーと奇妙なコードが含まれています。

static void insert (Record *p, char *s, int n) {

//p[(*)] = malloc(sizeof(person));

/*static int nextfreeplace = 0;*/
   Record *headptr = NULL;

   while(!reached_eof(p)){
/* allocate heap space for a record */
ptr =(Record*) malloc(sizeof(Record));

if(ptr == NULL){  
   abort();
   printf("memory allocation fail"); 
   exit(1);  
}else{
   printf("memory allocation to person  - %s - \n", s);      
}

whileループを使用している理由。そして、ptrポインターの定義を見逃し、関数の最後にneawヘッダーを伝達することに注意してください。あなたがそれを修正する方法の後にここに:

static void insert (Record **header, char *s, int n) {

   Record *ptr;
   ptr =(Record*) malloc(sizeof(Record));

    if(ptr == NULL){  
       abort();
       printf("memory allocation fail"); 
       exit(1);  
    }else{
       printf("memory allocation to person  - %s - \n", s);      
    }
    ptr->name=s;
    ptr->age=n;

    /* link new object into the list */
    ptr->next=*header;
    *headptr=ptr;
}

そしてあなたの主な機能では:

int main(int argc, char **argv) {


   int  i= 0;
  Record *p, *headptr=NULL;

for (int i=0; i < 7; i++) {
insert (&headptr, names[i], ages[i]);
/* do not dereference the pointer */
  }

 for (int i=0; i < 7; i++) { /* this will print from array*/
    printf("From array  The name is: %s, the age is:%i\n", p[i]->names, p[i]->ages);
}

for (p=headptr; p!=NULL; p=p->next) {  /* this will print from linked list*/
    printf("From linked list The name is: %s, the age is:%i\n", p->names, p->ages);
}


}
于 2012-11-25T15:51:15.900 に答える
0

唯一のエラーは、malloc関数で使用する前にポインターの定義を見逃したことだと思います。ポインタを次のように定義する

Record *ptr ;

そして、コードのどこかに次のテキストがあります。

int = 0;

それが2番目のエラーです。

pそして、forループに関数を挿入するためのNULLポインターを渡しています

これらを編集すると、今すぐエラーを修正する必要があります。

于 2012-11-25T15:50:10.460 に答える