Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida no código


pedromss

Pergunta

Queria que dessem uma olhada no código abaixo. Se entro com o valor de n = 100000, ele compila numa boa, mas se entro com n = 200000, dá uma mensagem de erro e fecha o programa. Uso o Dev-C++. Qualquer ajuda é válida, valeu.

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

int main(int argc, char *argv[]) 
{
    int n; // número de itens
    int CAP; // capacidade da mochila
    
    printf("Entre com o numero de itens: ");
    scanf("%d",&n);
    printf("Entre com a capacidade da mochila: ");
    scanf("%d",&CAP);
       
    int c[n]; // peso
    int b[n]; // benefício
    int max[n]; // número máximo de itens daquele tipo que pode colocar na mochila
    int itens[n]; // índice dos itens
    int v_solucao[n]; // vetor de soluções
    system("pause");
    
}

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Corrigi:

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

main(){
       int n;
       int cap;
       
       printf("Entre com o numero de itens:\t");
       scanf("%i", &n);
       printf("Entre com a capacidade da mochila:\t");
       scanf("%i", &cap);  
       system("pause");   
}

Você está dizendo que a string é um numero inteiro, intão use %i para atribuir um valor a ela.

Link para o comentário
Compartilhar em outros sites

  • 0
Corrigi:
#include <stdio.h>
#include <stdlib.h>

main(){
       int n;
       int cap;
       
       printf("Entre com o numero de itens:\t");
       scanf("%i", &n);
       printf("Entre com a capacidade da mochila:\t");
       scanf("%i", &cap);  
       system("pause");   
}

Você está dizendo que a string é um numero inteiro, intão use %i para atribuir um valor a ela.

nivi_loock, valeu pela força, mas o problema não é esse, continua dando o mesmo erro.

Qual é a mensagem de erro?

Não é erro de compilação. Ele compila mas depois aparece uma mensagem de erro do windows, aquela telinha falando que tem de encerrar o programa e se eu quero enviar um relatório de erros. Abri o relatório mas ele é gigantesco, não sei exatamente o que copiar e colocar aqui.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas você está colocando um número inteiro? porque aqui eu testei com inteiros e funcionou, e com decimais apareceu a mensagem.

Tente usar float no lugar de int e %f no lugar de %i.

eu já tentei, mas depois uso o valor de n para criar um vetor auxiliar[n] e depois preenchê-lo. Então se uso float para o valor de n, vai dar erro lá na frente. Estou entrando com valores inteiros sim.

Link para o comentário
Compartilhar em outros sites

  • 0

Essa mensagem do windows geralmente é falha na alocação de memória.

Os comandos:

int c[n]; // peso
    int b[n]; // benefício
    int max[n]; // número máximo de itens daquele tipo que pode colocar na mochila
    int itens[n]; // índice dos itens
    int v_solucao[n]; // vetor de soluções
Não devem esta alocando memória. A depender do compilador, o uso de variáveis como "n" pra declarar vetor não funcionam. Tenta usar o malloc assim:
int *c = malloc(n*sizeof(n)); // peso
    int *b = malloc(n*sizeof(n));
    int *max = malloc(n*sizeof(n)); // número máximo de itens daquele tipo que pode colocar na mochila
    int *itens = malloc(n*sizeof(n)); // índice dos itens
    int *v_solucao = malloc(n*sizeof(n));// vetor de soluções

No final usa o comando free pra liberar as alocações feitas com malloc.

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Essa mensagem do windows geralmente é falha na alocação de memória.

Os comandos:

int c[n]; // peso
    int b[n]; // benefício
    int max[n]; // número máximo de itens daquele tipo que pode colocar na mochila
    int itens[n]; // índice dos itens
    int v_solucao[n]; // vetor de soluções
Não devem esta alocando memória. A depender do compilador, o uso de variáveis como "n" pra declarar vetor não funcionam. Tenta usar o malloc assim:
int *c = malloc(n*sizeof(n)); // peso
    int *b = malloc(n*sizeof(n));
    int *max = malloc(n*sizeof(n)); // número máximo de itens daquele tipo que pode colocar na mochila
    int *itens = malloc(n*sizeof(n)); // índice dos itens
    int *v_solucao = malloc(n*sizeof(n));// vetor de soluções

No final usa o comando free pra liberar as alocações feitas com malloc.

Abraço.

Grande Ronaldo, funcionou direitinho agora. Obrigado.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...