Sorry for my poor code, but I can't understand why this code causes segmentation fault 11
when I run this on my mac terminal. I want to make the program read full sentences intact one by one using linked list, but it doesn't work.
I guess sentences in some.txt
aren't getting inserted in linkNode
. How can I fix it?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NUMBER 1024
typedef struct linkNode {
char *element;
struct linkNode *link;
} linkNode;
typedef struct {
linkNode *top;
int element_number;
} linkType;
void error(char* message) {
fprintf(stderr, "%s", message);
}
void init(linkType *L) {
L->top = NULL;
L->element_number = 0;
}
linkNode *createStack() {
linkNode *temp = (linkNode *) malloc(sizeof(linkNode));
temp->element = (char *) malloc(sizeof(char) * MAX_NUMBER + 1);
return temp;
}
void insert(linkType *L, char* new_data) {
linkNode *temp = createStack();
//temp->element = new_data;
strcpy(temp->element, new_data);
temp->link = L->top;
L->element_number++;
L->top = temp->link;
}
char *delete(linkType *L) {
if (L->element_number == 0) {
error("list empty\n");
}
linkNode *temp = L->top;
char * temp_element;
//temp->element = L->top->element;
strcpy(temp_element, L->top->element);
L->top = L->top->link;
L->element_number--;
free(temp);
return temp_element;
}
char *buffer_making() {
char *buffer = (char *) malloc(sizeof(char) * MAX_NUMBER + 1);
return buffer;
}
char *buffer_erase(char *buffer) {
free(buffer);
return NULL;
}
int main() {
linkType *q = (linkType *) malloc(sizeof(linkType));
init(q);
FILE *file_pointer;
char *file1;
file1 = (char *) malloc(sizeof(file1) + 1);
char *file2;
file2 = (char *) malloc(sizeof(file2) + 1);
printf("input file names:\n");
scanf("%s", file1);
getchar();
file_pointer = fopen(file1, "r");
while (!feof(file_pointer)) {
char *buffer1 = buffer_making();
fscanf(file_pointer,"%s",buffer1);
///////////
printf("%s\n",buffer1);
insert(q,buffer1);
buffer_erase(buffer1);
}
printf("point3\n");
while (!(q->element_number == 0)) {
printf("%s\n", delete(q));
}
free(file1);
free(file2);
return 0;
}
//printf("point1\n");