通用C ++链接列表

时间:2017-01-23 08:08:47

标签: c++ generics linked-list

以下是通用链表的代码。代码无效。无法弄清楚出了什么问题。不产生编译错误但不产生输出。

#include<iostream>
#include<stdlib.h>
using namespace std;
struct Node{
    void* data;
    Node* next;
};
void Insert(Node** head,void* k,size_t data_size){
    Node* temp=(Node*)malloc(sizeof(Node));
    temp->data=malloc(data_size);
    temp->next=*head;
    for(int i=0;i<data_size;i++){
        *((char*)(temp->data) + i) = *((char*)(k )+ i);
    }
    *head=temp;
}
void PrintList(Node* head,void (*fptr)(void*)){
    Node* temp=head;
    while(temp!=NULL){
        (*fptr)(temp->data);
        temp=temp->next;
    }
}
void PrintInteger(void* k){
    printf("%d",*(int*)(k));
}
void PrintFloat(void* k){
    printf("%f",*(float*)k);
}
int main(){
    int a[]={4,1,9,5};
    float b[]={1.3,7.6,2.5,4.7};
    Node*head=NULL;
    unsigned int_size=sizeof(int);
    unsigned float_size=sizeof(float);
    for(int i=3;i>=0;i++){
        Insert(&head,&a[i],int_size);
    }
    PrintList(head,PrintInteger);
    cout<<endl;
    Node* head2=NULL;
    for(int i=3;i>=0;i++){
        Insert(&head2,&b[i],float_size);
    }
    PrintList(head2,PrintFloat);
}

1 个答案:

答案 0 :(得分:1)

for(int i=3;i>=0;i++){
    Insert(&head,&a[i],int_size);
}

for循环中存在内存错误,请使用&#34; i - &#34;而不是&#34; i ++&#34;