単語ソートプログラムについて
Posted: 2013年5月08日(水) 18:56
以下の英単語のソートプログラムをつくりました。
バブルソートを使いstrcmpで文字を比較して1を入力したら昇順に0を入力したら降順にソートされます。
自分で実行すると正常に動くのですがこれを大学のサイトに提出してみると
実行時エラー:メモリリーク, 領域アクセスが適切に行われているか確認して下さい
と返ってきます
いろいろと試したのですが一向に変わりません。
どうしたらいいでしょうか?
よろしくお願いします。
バブルソートを使いstrcmpで文字を比較して1を入力したら昇順に0を入力したら降順にソートされます。
自分で実行すると正常に動くのですがこれを大学のサイトに提出してみると
実行時エラー:メモリリーク, 領域アクセスが適切に行われているか確認して下さい
と返ってきます
いろいろと試したのですが一向に変わりません。
どうしたらいいでしょうか?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
#define N 128
typedef struct node{
char str[N];
struct node *next;
}NODE;
int main(int argc, char *argv[]){
NODE *topnode=NULL, *newnode=NULL, *thisnode, *nextnode;
int order;
char b[N];
switch(atoi(argv[1])){
case 1:
order=1;
break;
case 0:
order=-1;
break;
}
while(1){
if(fgets(b,N,stdin)==NULL) break;
b[strlen(b)-1] = '\0';
newnode=(NODE*)malloc(sizeof(NODE));
newnode->next=NULL;
strcpy(newnode->str,b);
if(topnode==NULL){
topnode=newnode;
}
else{
thisnode=NULL;
nextnode=topnode;
while(nextnode!=NULL){
if(strcmp(b,nextnode->str)*order<0){
if(thisnode==NULL){
newnode->next=topnode;
topnode=newnode;
}
else{
newnode->next=nextnode;
thisnode->next=newnode;
}
break;
}
thisnode=nextnode;
nextnode=thisnode->next;
}
if(nextnode==NULL){
thisnode->next=newnode;
}
}
}
thisnode=topnode;
while(thisnode!=NULL){
printf("%s\n",thisnode->str);
thisnode=thisnode->next;
}
if(newnode !=NULL){
free(newnode);
newnode=NULL;
}
return 0;
}よろしくお願いします。