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

Program zatrzymuje się w momencie deklarowania tablicy dwuwymiarowej dynamiczne

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 28 lutego 2016 w C i C++ przez sebask08 Użytkownik (510 p.)

Witam,
Mam problem z tablicą dwuwymiarową dynamiczną w języku C. Program nie zdziała zatrzymuje się gdy deklaruje tablice dynamiczną dwuwymiarową może ją źle napisałem. Przesyłam cały program.

CodeBlocks 13.12; GNU GCC Compiler

 

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

int main()
{
    int w, k;
    double **tablica;
    int i=0, j=0;
    tablica=(double**)malloc(w*sizeof(double *));
    for(i;i<w;i++)
    {
      tablica[i]=(double*)malloc(k*sizeof(double));
    for (j; j < k; j++)
        {
            tablica[i][j]=(i+j)/10.0;
        }
    }
    do{
    printf("Podaj liczbe wierszy:");
    scanf("%d", &w);
    }while(w<0);

    do{
    printf("Podaj liczbe kolumn:");
    scanf("%d", &k);
    }while(k<0);

    


    for(i;i<w;i++)
    {
    for(j;j<k;j++)
    {
        printf("T[%d, %d] = ", i+1, j+1);
        scanf("%lf", &tablica[i][j]);
    } printf("\n");
    }





    for(i=0; i<w; i++)
    free(tablica[i]);
    free(tablica);
    tablica = NULL;
    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 28 lutego 2016 przez draghan VIP (106,230 p.)
wybrane 28 lutego 2016 przez sebask08
 
Najlepsza
Jaką wartość mają zmienne w i k?
1
komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Oczywiście chodzi mi o wartości tych zmiennych w momencie alokacji pamięci. ;)
komentarz 28 lutego 2016 przez sebask08 Użytkownik (510 p.)
Nawet program nie dochodzi do momentu deklarowania tych zmiennych poprostu pojawia się czysta konsola.
1
komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Nie sugeruj się w tej chwil efektami, widocznymi po uruchomieniu - odpowiedz na pytanie na podstawie swojego kodu. ;)
komentarz 28 lutego 2016 przez sebask08 Użytkownik (510 p.)
Dodatnimi, bez wartości. Jestem bardzo początkujący i nie bardzo wiem o co w tej chwili pytasz :D.
2
komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Okej. ;) No to tak - jeśli definiujesz zmienną i nie przypiszesz jej wartości, to w większości przypadków będzie ona zawierała w sobie śmieciowe, losowe wartości. Może to być np. 13 albo 987146.

Ty definiujesz zmienne w i k i zaraz potem alokujesz tablicę o rozmiarze... No właśnie. Jakim rozmiarze? Strzelam, że bardzo dużym, bo te śmieciowe wartości najczęściej trafiają się spore, ale to jest czysta losowość.

Przerzuć alokację pamięci w miejsce, gdzie już będziesz miał znaną wielkość tablicy, czyli po wpisaniu danych przez użytkownika.

Sama alokacja wygląda raczej poprawnie.
komentarz 28 lutego 2016 przez sebask08 Użytkownik (510 p.)
Też na to wpadłem po przeszukaniu internetów, ale problem jest ten sam tylko teraz program sie zatrzymuje od momentu deklarowanie liczby kolumn ale nie to ze sie zawiesza poprostu sie zatrzymuje jakby uważał że skończył . :)
1
komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Zapomniałeś jeszcze wyzerować liczników pętli przy dalszych operacjach na tablicach.

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

int main()
{
    int w, k;
    double **tablica;
    int i=0, j=0;

    do
    {
        printf("Podaj liczbe wierszy:");
        scanf("%d", &w);
    }
    while(w<0);
    do
    {
        printf("Podaj liczbe kolumn:");
        scanf("%d", &k);
    }
    while(k<0);

    tablica=(double**)malloc(w*sizeof(double *));
    for(i; i<w; i++)
    {
        tablica[i]=(double*)malloc(k*sizeof(double));
        for (j; j < k; j++)
        {
            tablica[i][j]=(i+j)/10.0;
        }
    }

    for(i = 0; i<w; i++)
    {
        for(j = 0; j<k; j++)
        {
            printf("T[%d, %d] = ", i+1, j+1);
            scanf("%lf", &tablica[i][j]);
        }
        printf("\n");
    }

    for(i=0; i<w; i++)
        free(tablica[i]);
    free(tablica);
    tablica = NULL;
    return 0;
}

 

1
komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Co to się porobiło, nie mogę edytować...

Gdybyś nie widział, tam jest napisane "Zapomniałeś jeszcze wyzerować liczników pętli przy dalszych operacjach na tablicach.".
komentarz 28 lutego 2016 przez sebask08 Użytkownik (510 p.)

Jesteś SUPER!!!!!!!!!!! Dzięki za poświęcenie czasu i pomoc:D

komentarz 28 lutego 2016 przez draghan VIP (106,230 p.)
Hahah. :) Na zdrowie. ;)

Podobne pytania

0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 18 stycznia 2018 w C i C++ przez AnastaZIuk Początkujący (330 p.)
0 głosów
1 odpowiedź 572 wizyt
0 głosów
1 odpowiedź 163 wizyt

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...