onde as duas primeiras sequências de números são padrões pré definidos, a terceira sequência de números é a probabilidade, o quarto número é a quantidade de repetições em cada probabilidade, saida é o nome do arquivo txt de saída, 1 é padrão e o ultimo valor é o mmc entre o primeiro número das duas primeiras sequências (7 e 13).
Na primeira ocasião é na chamada, após a primeira interação de um for de probabilidade, ou seja, na chamada passo 01.01.10 que quer dizer que inicie com 0.1, incremente em cada rodada 0,1 durante 10 vezes (vai de 10 a 100%). O 20000 é o número de repetições que serão executadas em cada probabilidade. Quando executo, as primeiras 20000 repetições com a probabilidade em 0.1 ocorrem corretamente e quando vai incrementar para probabilidade em 0.2 causa o erro de segmentation fault. Já tentei desalocar a memória utilizando free(pp) dentro deste for (linha 337) mas não funcionou e eu só desaloco a memória na linha 359.
Para remediar isso, mudei a chamada de forma manual, ou seja, a cada chamada eu passo um valor de probabilidade, assim ficou: ./prog 7,3,1,0,1,3 13,4,1,0,1,3,9 0.1,0,1 20000 saida 1 91 que passo como probabilidade inicial 0.1, 0 de incremento e 1 única vez. Desta forma consegui fazer funcionar. Até que me deparei na segunda ocasião que é quando tenho um valor maior de mmc. Por exemplo:
Pergunta
arcsaraiva
Prezados,
Estou executando um código que está apresentando erro de segmentation fault em duas ocasiões distintas.
Para executar são passados inúmeros parâmetros. Sendo a chamada assim:
./prog 7,3,1,0,1,3 13,4,1,0,1,3,9 0.1,0.1,10 20000 saida 1 91
onde as duas primeiras sequências de números são padrões pré definidos, a terceira sequência de números é a probabilidade, o quarto número é a quantidade de repetições em cada probabilidade, saida é o nome do arquivo txt de saída, 1 é padrão e o ultimo valor é o mmc entre o primeiro número das duas primeiras sequências (7 e 13).
Na primeira ocasião é na chamada, após a primeira interação de um for de probabilidade, ou seja, na chamada passo 01.01.10 que quer dizer que inicie com 0.1, incremente em cada rodada 0,1 durante 10 vezes (vai de 10 a 100%). O 20000 é o número de repetições que serão executadas em cada probabilidade. Quando executo, as primeiras 20000 repetições com a probabilidade em 0.1 ocorrem corretamente e quando vai incrementar para probabilidade em 0.2 causa o erro de segmentation fault. Já tentei desalocar a memória utilizando free(pp) dentro deste for (linha 337) mas não funcionou e eu só desaloco a memória na linha 359.
Para remediar isso, mudei a chamada de forma manual, ou seja, a cada chamada eu passo um valor de probabilidade, assim ficou: ./prog 7,3,1,0,1,3 13,4,1,0,1,3,9 0.1,0,1 20000 saida 1 91 que passo como probabilidade inicial 0.1, 0 de incremento e 1 única vez. Desta forma consegui fazer funcionar. Até que me deparei na segunda ocasião que é quando tenho um valor maior de mmc. Por exemplo:
./prog 133,12,1,0,9,10,12,26,30,67,74,82,109,114,120 183,14,1,0,12,19,20,22,43,60,71,76,85,89,115,121,168 0.1,0,1 20000 saida 1 24339
Ele executa algumas vezes e saí com segmentation fault. Já troquei vários tipos de int para double e nada.
Um detalhe é que para executar é necessário ter instalado a biblioteca LIBGSL (sudo apt-get install libgsl0-dev).
O código completo está em https://pastebin.com/vpMhPDP9
Como não tenho experiência em C++ e parte deste código foi me entregue pronto, só alterei nas funções genPP e na main.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.