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:
Question
arcsaraiva 0
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 to post
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.