2017-10-15 13 views
0

gccは0エラーを表示しますが、valgrindはメモリリークを示し、セグメンテーションフォルト(コアダンプ)の提案があるので私のプログラムを実行できません。 割り振りだけをチェックして、そのバグの詳細は0メモリリークを示しています。ファイル操作のどこかに問題がありますが、見つけられません。リークメモリ、セグメンテーションフォールト、C

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

int* arrsize(FILE *plik) 
{ 
if (plik == NULL) { 
    printf("Error: file pointer is null."); 
    return 0; 
} 
int* size; 
fscanf(plik, "%d", &size); 
return size; 
} 


int main() 
{ 
int i = 0, j = 0, k = 0, a = 0; 

FILE *fp; 
if ((fp = fopen("matrix.txt", "r")) == NULL) 
{ 
    printf("Error: file pointer is null.\n"); 
    return 1; 
} 
int size = arrsize(fp); 

printf("Array size is %d x %d ", size, size); 



double **arr = (double **)malloc(size * sizeof(double *)); 
for (i; i < size; i++) 
    arr[i] = (double *)malloc(size * sizeof(double)); 


for (j; j < size; j++) { 
    fscanf(fp, "%d", &arr[i][j]); 
} 



for (i; i < size; i++) 
{ 
    for (j = 0; j < size; j++) 
    { 

     printf("%lf\n", &arr[i][j]); 
    } 
} 

for (k; k < size; k++) { 
    free(arr[k]); 
} 
free(arr); 

fclose(fp); 

return 0; 
} 
+3

デバッガを使用してください。または、問題を示すために[mcve]を作成します。少なくともあなたのプログラムが何をしようとしているのかを説明してください。 –

+1

valgrindがリークを報告している場合は、レポートの関連部分を提示してください。 –

+0

しかし、最初の一見では、 'arrsize()'関数が、符号付き10進整数の 'scanf'指示文を介してポインタ値を読み取るのはなぜですか?代わりに 'int'を読み込んで返すのではないと確信していますか? –

答えて

2

変更はint*、実際にintを返さないarrsize:

int arrsize(FILE *plik) 
{ 
    if (plik == NULL) { 
     printf("Error: file pointer is null."); 
     return 0; 
    } 
    int size; 
    fscanf(plik, "%d", &size); 
    return size; 
} 
+0

私は同意する、エラーは、行int *サイズです。 –

関連する問題