tda410のプロフィール
- ベストアンサー数
- 2
- ベストアンサー率
- 40%
- お礼率
- 0%
- 登録日2011/10/05
- fgetsでエラー
C言語を勉強しているものです。 fgetsやfscanfで第一引数にダブルポインタ変数を用いるとエラーが出ます。 なぜそうなるんでしょうか? ダブルポインタだと不可能なんでしょうか? char **moji; FILE *fp; moji = (char**)malloc(sizeof(char*) * 128 * 256); fp = fopen("test.txt","r+"); fgets(moji[0], 26, fp); //ここでエラー mojiを[0]で指定してあげてもエラーなんでしょうか? fgetsだけでなくfscanfでもそうです。 どうしてそうなんるんでしょう?
- メールは情報ツールの彼に
たまにどうでもいいやや長ったらしいメールを 送ります。 返事はなく、段々と恥ずかしくなって (いい年して、幼稚な内容でした) また弁解のメールを送ってしまうわけですが そこに もう顔を合わせにくいと書いたら 急いで返事がありましたが たまに耳にする、面倒臭い女とは、自分みたいな人間を 指すのかも、と考え、改めるつもりではいますが 面倒ですか?
- ベストアンサー
- 恋愛相談
- noname7108808
- 回答数1
- C言語において、=と==の違いって何ですか?
C言語でプログラムを組むなかで例えば、 x = a + b 等の数式ではただの = 一個を使いますよね? だけど、 !=EOF においては使っているのは == ですよね? 基本的なことだとは分かっているのですがこの違いって何なんでしょうか?
- ベストアンサー
- C・C++・C#
- noname#177863
- 回答数4
- PIC 入力端子の監視?
PIC16F886を使っています。 すべての入力端子を監視して「もし~ms以上、入力端子に変化がなかったら」という条件文を作りたいのですが、どうすればいいのでしょうか。 何を作りたいかというと、電車のEB装置のようなものです。 一定時間操作がない場合には警告音を発し、それでも操作がない場合はプログラムをリセットするということです。 当方、PIC初心者なので条件文しか方法が思いつきませんが、このような動作をすれば何でも構わないです。 ご教授お願いします。
- ベストアンサー
- C・C++・C#
- maruyama6611
- 回答数2
- C言語のデバック 領域の二重解放が原因か??
学生で流体力学の研究を行っています。 研究の一環でフリーの数値解析ソフトを使っているのですが、ポスト処理の機能が弱いので、自作してみようと思いC言語で書いてみました。実行したところ、何とか結果は得られるのですが、エラーが出てしまいます。原因を教えて頂けたら幸いです。 翼周りの圧力分布を計算しており、ある点での圧力が時間とともにどのように変化するのか知りたかったので、今回のプログラムを作成しました。 実行ディレクトリ内には各時刻(以下のプログラム内では t)のディレクトリが存在し、その中に圧力(p)のデータが存在しています。各時刻のある点の圧力を一つのファイルに出力したかったので以下のプログラムを作りました。 実行したところ、 *** glibc detected *** ./a.out: double free or corruption (out): 0x0896f008 *** ======= Memory map: ========= ・・・ というエラーが出てしまします。glibc detectedは領域の二重解放を意味するらしいのですが、どこがおかしいのかわかりません。どなたか教えて頂けないでしょうか? C言語はかじった程度の知識しかないので、ほかにも変な点などがありましたら指摘して欲しいです。ubuntu 10.4上で動かしています。 実行ディレクトリ内 [以下のプログラム 0.0001 0.0002 0.0003 0.0004 ] 0.0001内 [p u(速度) などなど] 0.0002内 [p u(速度) などなど] ・・・ #include <stdio.h> #include <stdlib.h> #include <math.h> /* ベクトルの入力 */ void input_vector2(double *b, double t,int i , FILE *fin, FILE *fout); /* 行列の領域確保 */ double **dmatrix(int nr1, int nr2, int nl1, int nl2); /* 行列の領域解放 */ void free_dmatrix(double **a, int nr1, int nr2, int nl1, int nl2); /* ベクトル領域の確保 */ double *dvector(int i, int j); /* ベクトル領域の解放 */ void free_dvector(double *a, int i); int main(void) { FILE *fin, *fout; double *x; double t1,t2,dt,t; int n,i; char fn[5];/*圧力を指定するためのパス*/ t1 = 0.0001; /* 初期時刻 */ t2 = 0.0004; /* 終了時刻 */ dt = 0.0001; /*時間幅*/ n = 1 + (t2-t1)/dt; /* データ数 */ /* ベクトルの領域確保 */ x = dvector(1,n); /* x[1...n] */ /*書き込み用ファイルのオープン*/ if( (fout = fopen( "output_p.dat", "w")) == NULL ) { printf("ファイルが作成できません : output_p.dat \n"); exit(1); } for( i = 0 ; i <= n ; i++) { t=t1+dt*i; sprintf( fn,"./%5.4f/p",t); /* ファイルのオープン */ if( (fin = fopen( fn , "r")) == NULL ) { printf("ファイルが見つかりません : fn/p.dat \n"); printf("%s \n",fn); exit(1); } input_vector2( x, t, i,fin, fout ); /* ベクトルxの入出力 */ fclose(fin); /* ファイルのクローズ */ } fclose(fout); /* ファイルのクローズ */ /* 領域の解放 */ free_dvector( x, 1 ); return 0; } /* b[1...n]の入力 */ void input_vector2( double *b, double t,int i ,FILE *fin, FILE *fout) { double a; fseek(fin,860,SEEK_SET); fscanf(fin, "%lf", &b[i]); fprintf(fout, "%5.4f\t",t); fprintf(fout, "%5.2f\n", b[i]); } double **dmatrix(int nr1, int nr2, int nl1, int nl2) { int i, nrow, ncol; double **a; nrow = nr2 - nr1 + 1 ; /* 行の数 */ ncol = nl2 - nl1 + 1 ; /* 列の数 */ /* 行の確保 */ if ( ( a=(double **)malloc( nrow*sizeof(double *) ) ) == NULL ) { printf("メモリが確保できません(行列a)\n"); exit(1); } a = a - nr1; /* 行をずらす */ /* 列の確保 */ for( i=nr1; i<=nr2; i++) a[i] = (double *)malloc(ncol*sizeof(double)); for( i=nr1; i<=nr2; i++) a[i] = a[i]-nl1; /* 列をずらす */ return(a); } void free_dmatrix(double **a, int nr1, int nr2, int nl1, int nl2) { int i; /* メモリの解放 */ for ( i = nr1 ; i <= nr2 ; i++) free((void *)(a[i]+nl1)); free((void *)(a+nr1)); } double *dvector(int i, int j) /* a[i]?a[i+j]の領域を確保 */ { double *a; if ( (a=(double *)malloc( ((j-i+1)*sizeof(double))) ) == NULL ) { printf("メモリが確保できません(from dvector) \n"); exit(1); } return(a-i); } void free_dvector(double *a, int i) { free( (void *)(a + i) ); /* (void *)型へのキャストが必要 */ }
- ベストアンサー
- C・C++・C#
- ryutaitaro
- 回答数5