![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
以下のプログラムについて
alice.txtからテキストを読み込みその中の異なる単語の数を求めるプログラムです
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
#include<ctype.h>
#define NMAX 80
#define LMAX 5000
void count(int);
void all_words(void);
FILE *fp, *fp2;
char *fn="alice.txt";
char *fn2="total word.txt";
const char *ignore="\n !?()*-;:.,_\"[]";
int main(void){
int p=0, x=0, c, l, t=0;
char word3[LMAX][NMAX];
char word1[NMAX];
char word2[NMAX];
char *tp;
char *tp2;
if((fp=fopen(fn,"r"))==NULL){
printf("Can't open '%s'.\n",fn);
return -1;
}
if((fp2=fopen(fn2,"w"))==NULL){
printf("Can't open '%s'.\n",fn2);
return -1;
}
for(c=0;c<LMAX;c++){
if(fgets(word3[c],NMAX,fp)==NULL)
break;
p++;
}
for(c=0;c<p;c++){
for(x=0;x<NMAX;x++){
word1[x]=tolower(word3[c][x]);
}
tp=word1;
while((tp2=(char*)strtok(tp,ignore))!=NULL){
if(*tp2=='\''){
if(*(tp2+1)=='`'){
t=1;
}
tp2++;
}
strcpy(word2,tp2);
l=strlen(word2)-1;
if(word2[l]=='\''){
word2[l]='\0';
}
if(word2[l]==l){
word2[l]='\0';
}
if(word2[0] =='\'' &&t==0){
if(word2[1]!='\0'){
fputs(word2+1,fp2);
fputc('\n',fp2);
}
}
else{
if(word2[0]!='\0'){
fputs(word2,fp2);
fputc('\n',fp2);
}
}
tp=NULL;
}
}
fclose(fp);
fclose(fp2);
all_words();
return 0;
}
void all_words(void){
char word3[NMAX];
int n=0;
if((fp2=fopen(fn2,"r"))==NULL){
printf("Can't open '%s'.\n", fn2);
return;
}
for(;;){
if(fgets(word3, NMAX,fp2)==NULL){
break;
}
n++;
}
fclose(fp2);
count(n);
}
void count(int n){
int c, x, y=0;
char *m=(char *)malloc(n*NMAX);
char *xp;
char *yp;
if((fp2=fopen(fn2,"r"))==NULL){
printf("Can't open '%s'.\n", fn2);
free(m);
return;
}
for(c=0,xp=m; c<n;c++,xp+=NMAX){
fgets(xp,NMAX,fp2);
}
qsort(m,n,NMAX,(int (*)(const void*, const void*))strcmp);
c=1;
for(x=0,xp=m,yp=m+NMAX;x<n-1;xp+=NMAX,yp+=NMAX,x++){
if(strcmp(xp,yp)==0){
y++;
c++;
}
else{
c=1;
}
}
printf("%d\n",n-y);
free(m);
fclose(fp2);
}
このプログラムを実行するとメモリリークになってしまうのですが
確保していないメモリ領域に代入しているのが原因らしいのですが
いろいろ試してみたのですがメモリリークが直りません
どうしたらよいでしょうか?
よろしくお願いします
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
VC++2010 Expressで適当なワードを入れたalice.txtに対して実行したら、total word.txtが出力されて無事に終了しました。
出力が正しいかどうかは分かりませんが。どのような入力ファイルで、どのような結果になったのか。正しく説明していただかないと回答するのは難しいでしょう。
何故メモリリークだと判断されたのかも分かりませんし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル名を変数にした...
-
日本語ファイル名のFTPについて
-
C言語について
-
C言語 csv 配列
-
同時にファイル読み込み 書き込み
-
fscanfでループしてしまう。
-
fopenでファイル名に、変数を使...
-
構造体のメンバにファイルポイ...
-
画像の白黒表示
-
簡易grep関数ができません。助...
-
数値のみ抽出(C言語)
-
txtファイルの文字を配列に格納
-
大量の入力ファイルを扱うとき...
-
C言語でクロマキー合成をする方法
-
バイナリファイルでの時刻表示
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
辞書順にソートしたいのですが...
-
C言語でファイル読み書きを早く...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ガンマ変換 C言語でプログラ...
-
c言語でのfscanfについて
-
なぜCSQとCIP形式ではコ...
-
複数ファイルの同時読み込みの...
-
fopenでファイル名に、変数を使...
-
ファイル出力で改行を入れたい!
-
ファイルへの書込み処理が異常...
-
【C言語】ファイルを読み込んで...
-
エラーがわかりません、、
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
ファイルに行番号を追加
-
OpenGLによる描画内容をBMP出力
-
fscanfでループしてしまう。
-
c言語 ファイルから数字を読み...
-
ファイルが読み込めない・・・
-
CRC32の計算方法
-
CSVファイルの内容を構造体に格...
おすすめ情報