Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 11 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok NapísalOffline : 10.11.2007 16:08

caf

tento program funguje, ale ak date za hodnoty pola velke cisla, tak to vypise "segmentation fault" inak to funguje dokonale. preco je to tak?

Kód:
#include <stdio.h>

#include <stdlib.h>



int main()

{

    int xa, ya, xb, yb, i, j, m;

    int **pole_a, **pole_b, **pole_c;



    do {

        printf("Riadkov matice A: ");

        scanf("%i", &xa);

        printf("Stlpcov matice A: ");

        scanf("%i", &ya);

        printf("Riadkov matice B: ");

        scanf("%i", &xb);

        printf("Stlpcov matice B: ");

        scanf("%i", &yb);

        if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); }

    }

    while (ya != xb);

   

    pole_a = (int**) malloc(xa * sizeof(int*));            //polia dynamicky

    pole_b = (int**) malloc(xb * sizeof(int*));



    for(i = 0; i < xa; ++i) {

        pole_a[i] = (int*) malloc(ya * sizeof(int*));

    }



    for(i = 0; i < xb; ++i) {

        pole_b[i] = (int*) malloc(yb * sizeof(int*));

    }



    for(i = 0; i < xa; ++i) {                   //nacitnie hodnot do matice pole_a

        for(j = 0; j < ya; ++j) {

        printf("A(%i,%i) = ", i+1, j+1);

        scanf("%i", &pole_a[i][j]);

        }

    }



    for(i = 0; i < ya; ++i) {                   //nacitnie hodnot do matice pole_b

        for(j = 0; j < yb; ++j) {

        printf("B(%i,%i) = ", i+1, j+1);

        scanf("%i", &pole_b[i][j]);

        }

    }



    pole_c = (int**) malloc(xa * sizeof(int*));     //vytvorenie matice pole_c

    for (i = 0; i < xa; i++) {

        pole_c[i] = (int*) malloc(yb * sizeof(int*));

    }



    for(i = 0; i < xa; ++i) {                   //vynulovanie matice pole_c

        for(j = 0; j < yb; ++j) {

            pole_c[i][j] = 0;

        }

    }



    for(i = 0; i < xa; i++) {

        for (j = 0; j < yb; j++) {

            for (m = 0; m < yb; m++) {

                pole_c[i][j] += pole_a[i][m] * pole_b[m][j];

            }

        }

    }



    printf("\nMatica AxB = \n");



    for(i = 0; i < xa; i++) {         //vypis matice pole_c

        printf("\n    ");           

        for(j = 0; j < yb; j++) {

            printf("%3i ", pole_c[i][j]);

        }

        printf("\n");

    }

    printf("\n");

    return 0;

}


Offline

Skúsený užívateľ
Skúsený užívateľ
segmentation fault

Registrovaný: 10.07.07
Prihlásený: 02.11.17
Príspevky: 1060
Témy: 0
Bydlisko: Bratislava
Príspevok NapísalOffline : 10.11.2007 16:37

Je pouzity datovy typ int , max. hodnota je od -32768 do 32768







_________________
Nebo je modre, voda je mokra...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok NapísalOffline : 10.11.2007 16:53

Roberbo píše:
Je pouzity datovy typ int , max. hodnota je od -32768 do 32768


to ma short alebo short int. Int ma od –2,147,483,648 do 2,147,483,647

kedze tam robis sucin matice uz napriklad 100,000 * 100,000 ti presiahne tento rozsah


Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok Napísal autor témyOffline : 10.11.2007 18:09

lenze ono to robi, aj ked je rozmer matic 3x1 a 1x3

ale ked je 2x2 a 2x3 tak to spravi spravne

tu je riesenie ;D

Kód:
            scanf("%i", &pole_a[i][j]);

        }

    }


    printf("\nMatica A = \n\n");


    for (i = 0; i < xa; ++i) {                   //vypis matice A
        printf("    ");

        for (j = 0; j < ya; ++j) {

            printf("%3i ", pole_a[i][j]);

        }

        printf("\n");

    }

    printf("\n");



    for (i = 0; i < ya; ++i) {                   //nacitanie hodnot do matice pole_b

        for (j = 0; j < yb; ++j) {

            printf("B(%i,%i) = ", i+1, j+1);

            scanf("%i", &pole_b[i][j]);

        }

    }
   
    printf("\nMatica B = \n\n");

    for (i = 0; i < xb; ++i) {                   //vypis matice B
        printf("    ");

        for (j = 0; j < yb; ++j) {

            printf("%3i ", pole_b[i][j]);

        }

        printf("\n");

    }



    pole_c = (int**) malloc(xa * sizeof(int*));     //vytvorenie a vynulovanie matice pole_c

    for (i = 0; i < xa; i++) {

        pole_c[i] = (int*) malloc(yb * sizeof(int));
        for (j = 0; j < yb; ++j) {
            pole_c[i][j] = 0;
        }

    }



    for (i = 0; i < xa; i++) {                      //vynasobenie

        for (j = 0; j < yb; j++) {
            if (ya == 1) {

                for (m = 0; m < 1; ++m) {      // 1 ak matice su rozmeru (k*1)x(1*k)

                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);

                }

                printf("pole_c[%i][%i] = %i\n", i, j, pole_c[i][j]);
            }
            else {
                for (m = 0; m < yb; ++m) {

                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);

                }
            }

        }

    }



    printf("\nMatica AxB = \n");



    for(i = 0; i < xa; i++) {         //vypis matice pole_c

        printf("\n    ");           

        for(j = 0; j < yb; j++) {

            printf("%3i ", pole_c[i][j]);

        }

        printf("\n");

    }

    printf("\n");

    return 0;

}


Offline

Skúsený užívateľ
Skúsený užívateľ
segmentation fault

Registrovaný: 10.07.07
Prihlásený: 02.11.17
Príspevky: 1060
Témy: 0
Bydlisko: Bratislava
Príspevok NapísalOffline : 10.11.2007 20:30

nie je int ako int ...podla typu prekladaca moze mat bud dva alebo styri bajty a hodnota na konci +(-)1 tiez podla typu prekladaca ;)







_________________
Nebo je modre, voda je mokra...
Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok Napísal autor témyOffline : 11.11.2007 14:20

ja sa z toho zblaznim, ono ten program FUNGUJE ale uz ked dam rozmer 3x3 a 3x3 tak to spadne.... ale to je blbost, ze mam malo pamate alebo co.. proste co to moze byt ? tu mate kod, prosim vas pozrite sa na to.... fakt, ked dam vacsie rozmery, tak to padne...

Kód:
/* Stefan Miklosovic AI6
   zadanie 3 - nasobenie matic
*/


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

int main()
{
    int xa, ya, xb, yb, i, j, m;
    int **pole_a, **pole_b, **pole_c;

    do {
        printf("Riadkov matice A: ");
        scanf("%i", &xa);
        printf("Stlpcov matice A: ");
        scanf("%i", &ya);
        printf("Riadkov matice B: ");
        scanf("%i", &xb);
        printf("Stlpcov matice B: ");
        scanf("%i", &yb);
        if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); }
    }
    while (ya != xb);

    pole_a = (int**) malloc(xa * sizeof(int*));            //polia dynamicky
    pole_b = (int**) malloc(xb * sizeof(int*));

    for (i = 0; i < xa; ++i) {
        pole_a[i] = (int*) malloc(ya * sizeof(int));
    }

    for (i = 0; i < xb; ++i) {
        pole_b[i] = (int*) malloc(yb * sizeof(int));
    }

    for (i = 0; i < xa; ++i) {                   //nacitanie hodnot do matice pole_a
        for(j = 0; j < ya; ++j) {
            printf("A(%i,%i) = ", i+1, j+1);
            scanf("%i", &pole_a[i][j]);
        }
    }

    printf("\nMatica A\n\n");

    for (i = 0; i < xa; ++i) {                   //vypis matice A
        printf("    ");
        for (j = 0; j < ya; ++j) {
            printf("%3i ", pole_a[i][j]);
        }
        printf("\n\n");
    }

    printf("\n");

    for (i = 0; i < ya; ++i) {                   //nacitanie hodnot do matice pole_b
        for (j = 0; j < yb; ++j) {
            printf("B(%i,%i) = ", i+1, j+1);
            scanf("%i", &pole_b[i][j]);
        }
    }
   
    printf("\nMatica B\n\n");

    for (i = 0; i < xb; ++i) {                   //vypis matice B
        printf("    ");
        for (j = 0; j < yb; ++j) {
            printf("%3i ", pole_b[i][j]);
        }
        printf("\n\n");
    }

    pole_c = (int**) malloc(xa * sizeof(int*));     //vytvorenie a vynulovanie matice pole_c
    for (i = 0; i < xa; i++) {
        pole_c[i] = (int*) malloc(yb * sizeof(int));
        for (j = 0; j < yb; ++j) {
            pole_c[i][j] = 0;
        }
    }

    for (i = 0; i < xa; i++) {                      //vynasobenie
        for (j = 0; j < yb; j++) {
            if (ya == 1) {
                for (m = 0; m < 1; ++m) {      //yb-1 => ak sa rozmer rovna (k*1)x(1*k)
                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
                }
            }
            else {
                for (m = 0; m <= xa; ++m) {
                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
                }
            }
        }
    }

    printf("\nMatica AxB\n");

    for(i = 0; i < xa; i++) {         //vypis matice pole_c
        printf("\n    ");           
        for(j = 0; j < yb; j++) {
            printf("%3i ", pole_c[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}


Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6
Príspevok NapísalOffline : 11.11.2007 14:50

m@-nX píše:
to ma short alebo short int. Int ma od –2,147,483,648 do 2,147,483,647

kedze tam robis sucin matice uz napriklad 100,000 * 100,000 ti presiahne tento rozsah
to ma JAVA hentaky int







_________________
getch();?{readkey;?} na konci? !A naco! Riesenie je (Alt+F5)
99% pochopí a shaggy je druhá kategória
Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok Napísal autor témyOffline : 11.11.2007 14:56

nejde to aj tak, uz mi z toho sibe... furt to pada, ale len ked dam napr. 3x3 a 3x3, tak mi to padne, ale 2x2 a 2x2 to bere. a to je blbost, ze nasobim velke cisla.... neviem v com to moze byt.... toto je posledna verzia
Kód:
/* Stefan Miklosovic AI6
   zadanie 3 - nasobenie matic
*/


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

int main()
{
    int xa, ya, xb, yb, i, j, m;
    int **pole_a, **pole_b, **pole_c;

    do {
        printf("Riadkov matice A: ");
        scanf("%i", &xa);
        printf("Stlpcov matice A: ");
        scanf("%i", &ya);
        printf("Riadkov matice B: ");
        scanf("%i", &xb);
        printf("Stlpcov matice B: ");
        scanf("%i", &yb);
        if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); }
    }
    while (ya != xb);

    pole_a = (int**) malloc(xa * sizeof(int*));            //polia dynamicky
    pole_b = (int**) malloc(xb * sizeof(int*));

    for (i = 0; i < xa; ++i) {
        pole_a[i] = (int*) malloc(ya * sizeof(int));
    }

    for (i = 0; i < xb; ++i) {
        pole_b[i] = (int*) malloc(yb * sizeof(int));
    }

    for (i = 0; i < xa; ++i) {                   //nacitanie hodnot do matice pole_a
        for(j = 0; j < ya; ++j) {
            printf("A(%i,%i) = ", i+1, j+1);
            scanf("%i", &pole_a[i][j]);
        }
    }

    printf("\nMatica A\n\n");

    for (i = 0; i < xa; ++i) {                   //vypis matice A
        printf("    ");
        for (j = 0; j < ya; ++j) {
            printf("%3i ", pole_a[i][j]);
        }
        printf("\n\n");
    }

    printf("\n");

    for (i = 0; i < ya; ++i) {                   //nacitanie hodnot do matice pole_b
        for (j = 0; j < yb; ++j) {
            printf("B(%i,%i) = ", i+1, j+1);
            scanf("%i", &pole_b[i][j]);
        }
    }
   
    printf("\nMatica B\n\n");

    for (i = 0; i < xb; ++i) {                   //vypis matice B
        printf("    ");
        for (j = 0; j < yb; ++j) {
            printf("%3i ", pole_b[i][j]);
        }
        printf("\n\n");
    }

    pole_c = (int**) malloc(xa * sizeof(int*));     //vytvorenie a vynulovanie matice pole_c
    for (i = 0; i < xa; i++) {
        pole_c[i] = (int*) malloc(yb * sizeof(int));
        for (j = 0; j < yb; ++j) {
            pole_c[i][j] = 0;
        }
    }

    for (i = 0; i < xa; i++) {                      //vynasobenie
        for (j = 0; j < yb; j++) {
            if (ya == 1) {
                for (m = 0; m < 1; ++m) {      //yb-1 => ak sa rozmer rovna (k*1)x(1*k)
                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
                }
            }
            else {
                for (m = 0; m <= xa; ++m) {
                    pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
                }
            }
        }
    }

    printf("\nMatica AxB\n");

    for(i = 0; i < xa; i++) {         //vypis matice pole_c
        printf("\n    ");           
        for(j = 0; j < yb; j++) {
            printf("%3i ", pole_c[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}


Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 28.04.07
Prihlásený: 03.11.09
Príspevky: 133
Témy: 1
Príspevok NapísalOffline : 11.11.2007 15:28

cca 91. riadok:
Kód:
                for (m = 0; m <= xa; ++m) {

nahraď
Kód:
                for (m = 0; m < xa; ++m) {


Offline

Užívateľ
Užívateľ
segmentation fault

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok Napísal autor témyOffline : 11.11.2007 17:57

jj. tam bola chyba. dik


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok NapísalOffline : 12.11.2007 13:19

juho píše:
to ma JAVA hentaky int


aj c++ prelozene prekladacom pre 32 bitove procesory..ma 2 na 31 hodnot


Odpovedať na tému [ Príspevkov: 11 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Segmentation fault

v Assembler, C, C++, Pascal, Java

9

264

27.11.2012 19:08

Najiva Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Segmentation fault - C

v Assembler, C, C++, Pascal, Java

11

969

09.05.2011 22:20

M4rek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. QtCreator : Segmentation fault

v Assembler, C, C++, Pascal, Java

1

352

27.12.2010 19:39

Forty- Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Segmentation fault v C

v Assembler, C, C++, Pascal, Java

0

321

30.01.2012 19:13

KocuR Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. string v C = segmentation fault

v Assembler, C, C++, Pascal, Java

1

290

05.11.2011 12:01

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. General protection fault

v Operačné systémy Microsoft

0

518

27.08.2008 20:57

misso Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra