2017-10-15 81 views
0

gcc顯示0錯誤,但valgrind顯示內存泄漏,我不能執行我的程序,因爲分段錯誤(核心轉儲)的任何建議嗎? 我單獨檢查了分配情況,其精細的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()'函數通過'scanf'指令爲帶符號的十進制整數讀取一個指針值?你確定你不是指它讀取並返回一個'int',而是? –

回答

2

變化arrsize實際返回int,而不是int*

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 * size; –