Linked List - program crashes while adding nodes

My code compiles correctly, but after 4 loops of my insertLast function, the program crashes. Can someone help me understand why?

I posted a similar question earlier which helped me identify other problems. I've rewritten the function but I still have the same problem. My code below:

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


int main (int argc, char* argv[])

{
    int ii;

        {
        FILE* f; /*open file for reading to get ints*/
        f = fopen(argv[1], "r");

        if(f==NULL) 
            {
            printf("Error: could not open file");
            return 0;
            }

    LinkedList* canQueue=createList();

    for(ii = 0; ii < 10; ii++)
        {
        TinCan* tempCan= (TinCan*) malloc(sizeof(TinCan));
        fscanf(f, " WGT_%d", &tempCan[ii].weight);
        insertLast(canQueue, tempCan); /*Inserts the new can into linked list*/
        }
    testLinkedList(canQueue);
    }
    return 0;

}

LinkedList.h

typedef struct TinCan
    {
    int weight;
    } TinCan;

typedef struct Node
    {
    TinCan* data;
    struct Node *next;
    } Node;

typedef struct LinkedList
    {
    Node *head;
    } LinkedList;

void insertLast(LinkedList* list, TinCan *newData);
LinkedList* createList();
void testLinkedList(LinkedList* list);

LinkedList.c

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

LinkedList* createList() /*creates empty linked list*/
  {
    LinkedList* myList;
    myList = (LinkedList*)malloc(sizeof(LinkedList));
    myList->head = NULL;
    return myList;
  }

void insertLast(LinkedList* list, TinCan *newData)
    {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = newData;
    newNode->next = NULL;

    if(list->head==NULL)
        {
        Node* current = (Node*)malloc(sizeof(Node));
        list->head=newNode;
        current=newNode;
        }

        else
            {
            Node* temp = (Node*)malloc(sizeof(Node));
            temp = list->head;
            while(temp->next!=NULL)
                {
                temp = temp->next;
                }
             temp->next = newNode;
            }
  printf("Looped\n");
  }


void testLinkedList(LinkedList* list)
  {
  Node* current;
  current = list->head;

  while(current != NULL)
    {
    printf("Weight = %d\n", current->data->weight);
    current = current->next;
    }
  }

Answers


These lines can be removed:

Node* current = (Node*)malloc(sizeof(Node));
current=newNode;

This line doesn't need an allocation of memory:

Node* temp = (Node*)malloc(sizeof(Node));

I bet you are actually breaking on this line though:

fscanf(f, " WGT_%d", &tempCan[ii].weight);

tempCan isn't an array, I'm not 100% sure what the &tempCan[ii] will do, but I suspect you're accessing memory around your tempCan pointer location and that it's only working for 4 because that's the size of something.


Need Your Help

Ember array serialization

arrays serialization ember.js

I'm adding objects to an array property of a model, then saving it. When I look at the outgoing request, the property in question is always an empty array.

How to insert JSON format into dataProvider using amcharts library with mySql

javascript php mysql amcharts amstock

I want to do the same thing as here but with the data extracted from mySQL database and using amCharts library, so here is a snap from the code used to extract data.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.