Matriz 3D (array 3d)

1. Matriz 3D (array 3d)

Roberto Júnior
dibetao

(usa Debian)

Enviado em 07/10/2005 - 17:36h

Estou enfrentando um problema com a nova versão que está disponível do gcc 1:3.3.5-13, este problema não ocorrira com o 1:3.3.5-12. O problema é com a declaração de uma matriz (array), em que uso o seguinte: "int mat[1024][1024][11]". O programa compila sem nenhum erro, mas na hora de rodar: "segmentation fault". Quando declaro apenas "int mat[1024][1024]" ou "mat[1024][1024][0]", não dá erro nenhum.

Peço ajuda URGENTE, pois eu usava o kurumin 3.3, agora instalei o 5.0 que vem com outra versao do gcc.

Valeu galera.


  


2. Re: Matriz 3D (array 3d)

Gabriel Assis Bezerra
gabriel.bezerra

(usa Gentoo)

Enviado em 07/10/2005 - 23:49h

Mostra como fica o erro todo que aí da pra dar uma ajudada, senao fica ruim.


3. Erros que aparecem

Roberto Júnior
dibetao

(usa Debian)

Enviado em 08/10/2005 - 10:12h

Compilo e executo da seguinte maneira:
-------------------------------------------------------
roberto@feynman:~/Projects/teste1/meu$ c++ lattice_ilg.c
roberto@feynman:~/Projects/teste1/meu$ ./a.out
Segmentation fault
roberto@feynman:~/Projects/teste1/meu$
-------------------------------------------------------

Para rodar do GDB é o sehuinte:
-------------------------------------------------------
roberto@feynman:~/Projects/teste1/meu$ c++ -g lattice_ilg.c
roberto@feynman:~/Projects/teste1/meu$ gdb ./a.out
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-linux"...Using host libthread_db library "/lib/tls/libthread_db.so.1".

(gdb) run
Starting program: /home/roberto/Projects/teste1/meu/a.out

Program received signal SIGSEGV, Segmentation fault.
main () at lattice_ilg.c:251
251 TMatriz mat(256,256,2);
Current language: auto; currently c++
(gdb) quit
The program is running. Exit anyway? (y or n) y
roberto@feynman:~/Projects/teste1/meu$
-------------------------------------------------------

Não entendi. O que pode ser?


4. Codigo:

Roberto Júnior
dibetao

(usa Debian)

Enviado em 10/10/2005 - 16:35h

O codigo que estou tentando compilar eh o seguinte:

1 #include<stdio.h>
2 #include<stdlib.h>
3
4 class TMatriz
5 {
6 int L,C,NT;
7 int vet[1025][1025][11]; //Todos deve ter tamanho+1
8
9 public:
10
11 TMatriz(const int, const int, const int);
12
13 int num_lin(void) {return L;}
14 int num_col(void) {return C;}
15
16 };
17
18 TMatriz::TMatriz(const int a, const int b, const int nt)
19 {
20 L = a;
21 C = b;
22 NT= nt;
23 }
24
25
26 main()
27 {
28
29 TMatriz mat(10,10,2);
30 printf("%d\n",mat.num_lin());
31
32 }
33
34

Quando reduzo a matriz para "vet[256][256][11]", nao acontece nenhum problema. Estou achando que tem a ver com a memoria que aloco para minha variavel "vet[][][]".

O que esta havendo?


5. Re: Matriz 3D (array 3d)

Jarno Trulli
Jarnotrulli

(usa Slackware)

Enviado em 11/10/2005 - 12:23h

Testei e deu Segmantation Fault mesmo...
Deve ser o tamanho da matriz (um pouco grotesco por sinal...), pois mudando este tamanho o programa funcionava perfeitamente...


6. será...será....?

Gabriel Assis Bezerra
gabriel.bezerra

(usa Gentoo)

Enviado em 13/10/2005 - 22:36h

será que não há alguma opção no compilador para resolver esse problema?


7. Quem Souber

Roberto Júnior
dibetao

(usa Debian)

Enviado em 14/10/2005 - 08:22h

Se houver, alguem pode me ajudar? Nao conheço muito as opçoes de compilaçao.


8. Pilha

Edivan castro de souza
edivan

(usa Debian)

Enviado em 21/10/2005 - 01:55h

O problema que vc aloca uma matriz muito grande na pilha, tente declarar a variavel globalmente ou usar alocação dinamica(malloc ou new)


9. o texto que segue deve te dar uma luz! o cara que o escreveu teve o mesmo problema que vc...

ggf84
ggf84

(usa Suse)

Enviado em 19/01/2007 - 18:46h

> Olá pessoal!
>
> Eu estou fazendo um programa (em C) que tem como entrada uma matriz de
> tamanho variável, dada pelo usuário.
> Para gerar essa matriz, eu criei a seguinte função:
>
> void gera_matriz(float **matriz, int i, int j)
> {
> int contador;
>
> /* Primeiro eu crio um bloco com `i' ponteiros */
> if (!(*matriz = (float *) malloc((i * (sizeof(float *))))))
> {
> printf("Não há memória suficiente");
> exit(-1);
> }
>
> /* Agora crio `i' blocos com `j' floats */
> for (contador = 0; contador < i; contador++)
> {
> if (!(matriz[contador] = (float *) malloc((j *
> (sizeof(float))))))
> {
> printf("Não há memória suficiente");
> exit(-1);
> }
> }
> }
>
> E no meu main() eu declaro as seguintes variáveis:
>
> int main(void)
> {
> int contai, contaj, pivo;
> int i, j, jaument;
> int operador;
> float **matriz;
>
> ...
> gera_matriz(matriz, i, jaument);
> ...
> }
>
> Quando eu compilo e rodo o programa, ele dá "Segmentation fault". Então,
> depois de muito quebrar a cabeça, eu comecei a tentar coisas absurdas e uma
> delas funcionou:
>
> int main(void)
> {
> float **matriz;
> int contai, contaj, pivo;
> int i, j, jaument;
> int operador;
>
> ...
> gera_matriz(matriz, i, jaument);
> ...
> }
>
> Não viram diferença? Olhem a posição da declaração do "float **matriz;". Isso
> deixou o meu programa funcionando! Agora eu pergunto: isto é normal? É uma
> regra que eu não sei (Já que aprendi a programar sozinho)? Esqueci de algo na
> linha de comando do gcc ( que foi "gcc -Wall -o gauss-jordan
> gauss-jordan.c")? É um bug?
>
> Desculpem a pergunta meio off-topic.
>






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts