2013-04-04 1 views
0

У меня проблема с моей программой я не знаю, что делать :(Доступ место чтения нарушение 0xCCCCCCCC

double spocitaj(FILE *fr,double **polsum, int *cena){ 

int r=0, i=0,k=0; 
double n=0; 
char c; 


while((c=getc(fr))!=EOF){ 
    if(c=='\n') r++; 
    if(r==4){ 
     *cena=k++; 
     r=5; 
    } 
    if(r==6) r=0;  
} 

*polsum=(double *)calloc(k,sizeof(double)); 
r=1; 
rewind(fr); 

while((c=getc(fr))!=EOF){ 

    if(c=='\n') r++; 
    if(r==4) { 
        ungetc(c,fr); 
      fscanf(fr,"%lf", &n); 
      *polsum[i]=n; 
      i++; 
    } 
    if(r==6) r=1;  
} 

for(i=0;i<*cena;i++) 
        printf("%.2lf\n", *polsum[i]); 
return 0; 

}

Можете ли вы помочь мне, пожалуйста это сообщение: Unhandled исключение в 0x012947F8 в Projekt 1.exe: 0xC0000005:.

Доступ нарушение письменность расположение 0xCCCCCCCC

+0

Возможно неинициализированная указатель. – chris

+0

Как это исправить? Pls .... –

+1

Запустите в отладчике и найдите строку, которая выдает исключение, затем просмотрите значения и сравните их с ожидаемыми. –

ответ

5

*polsum[i]=n; должно быть (*polsum)[i] = n;.

*polsum[i] является *(polsum[i]), которая лечит polsum как массив, но вы, вероятно, намерены это будет один указатель, указатель, где есть double *.

Изменение это (*polsum)[i]) говорит: «Посмотрите на double *, который где polsum точек. То, что double * указывает на место, где есть много double объектов. Получить iй один.»

+0

THX. это работает –