[c][solved] Błąd:segmentation fault, sumowanie macierzy

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
witcher23
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 22 paź 2008, 17:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

[c][solved] Błąd:segmentation fault, sumowanie macierzy

Post autor: witcher23 »

Witam, mam pewien problem z moim programem:
//Program sumujący dwie macierze
#include<stdio.h>
#include<iostream>
void suma(int **A, int **B, int wierszA, int wierszB, int kolumnaA, int kolumnaB);

int main(void)

{
int w, k;
int wierszA, wierszB, kolumnaA, kolumnaB;
int **A, **B;

printf("Podaj wymiar macierzy A(np 3x3): ");
scanf("%dx%d", &wierszA, &kolumnaA);

printf("Podaj wymiar macierzy B(np 3x3) :");
scanf("%dx%d", &wierszB, &kolumnaB);

srand (time (NULL));

for(k=0; k<wierszA; k++) {
for(w=0; w<kolumnaA; w++){ *(*(A+w)+k) = rand()%10;
}
}

for(k=0; k<wierszB; k++){
for(w=0; w<kolumnaB; w++){ *(*(B+w)+k) = rand()%10;
}
}
puts("Macierz A:\n");
for (k=0; k<wierszA; k++) {
for (w=0; w<kolumnaA; w++) printf("%i ", *(*(B+w)+k));
printf("\n");

}
puts("Macierz B:\n");
for (k=0; k<wierszB; k++) {
for (w=0; w<kolumnaB; w++) printf("%i ", *(*(B+w)+k));
printf("\n");
suma(A, B, wierszA, wierszB, kolumnaA, kolumnaB);
}
return 0;

}//koniec funkcji main

void suma(int **A, int **B, int wierszA, int wierszB, int kolumnaA, int kolumnaB)
{
if((wierszA==wierszB)&&(kolumnaA==kolumnaB))
{
int w, k;
printf("\nSuma macierzy A i B:\n");
for (k=0; k<wierszA; k++) {
for(w=0; w<kolumnaA; w++) printf("%i", *(*(A+w)+k) + *(*(B+w)+k));
printf("\n");
}
}
else {printf("\nNiezgodność wymiarów macierzy\n");
}
}//koniec funkcji suma

Po uruchomieniu programu pojawia mi się błąd, zaraz po tym jak podam wymiary odpowiednich macierzy.

Pozdrawiam
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Błąd: Segmentation fault

Post autor: Hauleth »

bo nie masz określonych rozmiarów macierzy.

PS
po co inkludujesz i iostream, i stdio?? Zdecyduj się, albo albo.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Błąd: Segmentation fault

Post autor: Struchu »

Hauleth pisze:bo nie masz określonych rozmiarów macierzy
Inaczej: w ogóle nie przydzielasz pamięci na macierz.
Ma zielone, kocie oczy...
witcher23
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 22 paź 2008, 17:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [c] Błąd:segmentation fault

Post autor: witcher23 »

Ok, dzięki już wszystko działa. Dodałem tam iostream, bo mój dev c++ nie rozpoznawał funkcji srand.

Pozdrawiam
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [c][solved] Błąd:segmentation fault, sumowanie macierzy

Post autor: Hauleth »

no nic dziwnego, że nie rozpoznawał skoro nie zainkludowałeś <cstdlib> :shock:
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
witcher23
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 22 paź 2008, 17:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [c][solved] Błąd:segmentation fault, sumowanie macierzy

Post autor: witcher23 »

Raczej nic nie muszę dodawać, wystarczy, że zmienię rozszerzenie z .cpp na .c i będzie ok. Mam teraz inny problem, bo pojawia mi się

[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status
#include<stdio.h>
#include "funkcja_suma.h"
int main(void)


{
int w, k;
int wierszA, wierszB, kolumnaA, kolumnaB;
int **A, **B;

puts("Podaj wymiar macierzy A(np 3x3): ");
scanf("%dx%d", &wierszA, &kolumnaA);

puts("Podaj wymiar macierzy B(np 3x3) :");
scanf("%dx%d", &wierszB, &kolumnaB);

A = (int**) malloc(kolumnaA * sizeof (int*));
for(w=0; w<kolumnaA; w++) *(A+w) = (int*)malloc( wierszA * sizeof(int));
B = (int**) malloc(kolumnaB * sizeof (int*));
for(w=0; w<kolumnaB; w++) *(B+w) = (int*)malloc( wierszB * sizeof(int));

srand (time (NULL));



for(k=0; k<wierszA; k++) {
for(w=0; w<kolumnaA; w++){ *(*(A+w)+k) = rand()%10;
}
}

for(k=0; k<wierszB; k++){
for(w=0; w<kolumnaB; w++){ *(*(B+w)+k) = rand()%10;
}


}
puts("Macierz A:\n");
for (k=0; k<wierszA; k++) {
for (w=0; w<kolumnaA; w++) printf("%i ", *(*(A+w)+k));
printf("\n");

}
puts("\nMacierz B:\n");
for (k=0; k<wierszB; k++) {
for (w=0; w<kolumnaB; w++) printf("%i ", *(*(B+w)+k));
printf("\n");
}

suma(A, B, wierszA, wierszB, kolumnaA, kolumnaB);


for(w=0; w<kolumnaA; w++) free(A+w);
free(A);
for(w=0; w<kolumnaB; w++) free(B+w);
free(B);

return 0;

}//koniec funkcji main
}
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [c][solved] Błąd:segmentation fault, sumowanie macierzy

Post autor: Hauleth »

Weź jakiś porządny edytor i po sprawdzaj czy masz dobrze pozamykane klamry bo coś mi się to nie widzi.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [c][solved] Błąd:segmentation fault, sumowanie macierzy

Post autor: mikolajs »

Klamry są ok, bo to błąd linkera.
Dziwny błąd. Spróbuj usunąć void jako argument funkcji main. Rozumiem, że kompilujesz w gcc a nie g++ ;)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości