• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyskakuje błąd po odpaleniu się konsoli

0 głosów
138 wizyt
pytanie zadane 9 marca 2016 w C i C++ przez sebask08 Użytkownik (510 p.)
edycja 9 marca 2016 przez sebask08


Po skompilowaniu program wyskakuje okno program 
przestaje działać siedze nad nim troche i nie moge
 znaleźć błędu. Moze ktoś pomoże?
Program ma polegać na zczytaniu z pliku macierzy
5 3
1.00 2.12 2.00
2.30 3.03 4.00
3.55 5.43 56.2
4.30 6.55 77.5
5.60 2.54 2.2

i zapisaniu do pliku macierzy ktorej poszczegolne elementy sa podzielone przez
najwiekszy element macierzy.

 



#include <stdio.h>
#include <stdlib.h>
FILE *plik1;
FILE *plik2;
int r, c, i, j;
double find_mtx_max(double **tab, int r, int c)
{

    double max = tab[0][0];
    double x;
    for (i =0; i<r; i++)
    {
        for (j =0; j<c; j++)
    {
        if(tab[i][j]>max)
        {
            max = tab[i][j];
        }
    }
    }
    return max;
}

int main()
{
    if((plik1 = fopen("plik1.txt", "r"))==NULL)
    {
        printf("Blad, plik o nazwie %s nie istnieje", "plik1.txt");
        return 1;
    }
    if((plik2 = fopen("plik2.txt", "w"))==NULL)
    {
        printf("Blad, plik o nazwie %s nie istnieje", "plik2.txt");
    }
    int r, c, i, j;
    fscanf(plik1, "%d %d", &r, &c);
    double **tab = (double **)malloc(sizeof(double *)*r);
    double max = find_mtx_max(tab, r, c);
    for (i = 0; i < r; ++i)
    {
        for (j = 0; j < c; ++j)
        {
        tab[i][j] /= max;
        }
    }
    for(i=0; i<c; i++)
    {
        for(j=0; j <r; j++)
        {
            fprintf(plik2, "%.3lf", tab[j][i]);

        }
           fprintf(plik2, "\n");
    }

    for (i = 0; i < c; ++i) free(tab[i]);
	free(tab);

	fclose(plik1);
	fclose(plik2);

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 9 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)

Zaalokowałeś pamięć tylko na tablicę wskaźników na typ double (wiersze macierzy). Musisz jeszcze dla każdego przydzielonego wskaźnika z tej tablicy, przydzielić pamięć na tablicę zmiennych typu double (kolumny macierzy).

Podobne pytania

+1 głos
1 odpowiedź 1,537 wizyt
0 głosów
4 odpowiedzi 965 wizyt
pytanie zadane 24 lutego 2016 w C i C++ przez Owczarek Niemiecki Obywatel (1,570 p.)
0 głosów
1 odpowiedź 287 wizyt
pytanie zadane 5 grudnia 2016 w C i C++ przez varespol Użytkownik (710 p.)

93,425 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...