Erro C ++ terminando chamado após jogar uma instância de stdbad_alloc

Erro C ++ terminando chamado após jogar uma instância de stdbad_alloc

Como estamos familiarizados com bugs que podem ocorrer em nosso código devido a algum motivo, seja um erro cometido pelo codificador, a versão emitidos ou alguns outros motivos, pode existir devido ao qual encontramos os erros. Existem três tipos de erros. Alguns deles são lógicos, enquanto outros são sintaxe ou de compilar erros de tempo. Hoje, discutiremos um erro que pode ocorrer devido a alguns problemas relacionados à memória. Esses tipos de problemas às vezes são tarefas agitadas para resolver. Mas hoje, discutiremos -os brevemente para resolver esses erros. O erro que aprenderemos é "encerrar chamado depois de jogar uma instância de 'std :: bad_alloc'". Este erro está relacionado à memória. Esse erro pode ocorrer como resultado do seguinte:

Falha de alocação na memória: Pode ocorrer devido à alocação das grandes partes da memória usando a palavra -chave “nova” porque leva à falha de alocação na memória. O erro é exibido, que mostra que não existe memória para alocar os dados.

Tarefas consumindo RAM em Bedtools: Este erro pode ocorrer em bedtools. Esse erro ocorre que mostra que a maior parte da RAM é consumida pela tarefa que você está executando.

A corrupção da memória: O código defeituoso leva a esse tipo de erro. O codificador deve garantir que ele tenha escrito o código correto. Às vezes, torna -se sarcástico ao receber uma entrada do usuário e depois usar a palavra -chave "nova" para alocar a memória no momento da compilação. Às vezes, torna incorreto porque a nova palavra -chave espera que o valor correto seja passado. Se tentarmos passar uma entrada incorreta, isso causa o erro bad_alloc.

Sintaxe:

É um erro de tempo de compilação. Não tem sintaxe. Aqui está como fica a seguir:

Erro: rescindir chamado após jogar uma instância de 'std :: bad_alloc'

Onde 'std :: bad_alloc' indica o objeto que é jogado pela função de alocação como uma exceção que mostra a falha da alocação na memória.

Exemplo:

Vamos implementar um exemplo no qual pegamos os valores do usuário sobre os alunos. Então, depois de armazená -los em uma pilha de memória, nós os exibimos usando um loop para loop. Primeiro, incluímos os arquivos de cabeçalho "iostream", "string" e "cstdlib". O "iostream" é usado para executar as operações de E/S como CIN, Cout, etc. Um arquivo de cabeçalho de string é usado para operar com manuseio de string. E a biblioteca "CSTDLIB" é uma coleção de funções que podem ajudar em algumas funções matemáticas. A conversão de um tipo de dados é feita usando sua função definida.

Depois disso, criamos duas matrizes - "Stud_id []" do tamanho três, que armazena o ID do aluno e "makrs []" do tamanho 5, que atinge as marcas dos alunos. Em seguida, uma variável inteira é usada para acessar os valores usados ​​para o loop. Em seguida, uma variável adicional de string "ID" ao qual atribuímos o valor de "Stud_id" e o armazenamos na memória. Em seguida, usando o loop for que começa de 0 a 3, ele leva o ID do usuário.

Agora, alocamos o ID, uma memória que usa a variável "Temp". Depois disso, copiamos o valor da temperatura para o "id". Em seguida, usamos a função "substr ()" no comprimento do ID que é armazenado no "id". Depois disso, atribuímos as “marcas [k]” “Atoi (temp)”, que converte a string no número inteiro e a atribui à matriz Marks []. Então, fora do loop, usamos o loop for novamente. Recebemos os valores e os exibimos como uma saída. Executamos o código retornando o valor nulo.

#incluir
#incluir
#incluir
usando namespace std;
int main ()

char stud_id [3]; int as marcas [5];
int k;
ID da string;
para (k = 0; k <= 3; k++)

cout<< "Kindly enter an ID:";
Cin >> id;
char* temp = novo char [id.tamanho ()+1]; id.cópia (temp, id.tamanho () + 1);
stud_id [k] = id [0]; temp = novo char [id.tamanho ()-2];
Id = id.substr (2, id.comprimento());
Eu ia.cópia (temp, id.tamanho () + 1);
marcas [k] = Atoi (temp);

cout << endl;
cout << "Name" << " "<< "Average" << endl;
para (k = 0; k <= 5; k++)
cout << stud_id[k] <<" "<< marks[k] << endl;

retornar 0;

Após a execução, ele não exibe o erro primeiro enquanto tentamos passar os valores definidos pelo usuário, lançando o erro que é mostrado no seguinte. Vendo esse erro, não podemos identificar o motivo do erro. Agora, corrigimos nosso código que pode nos impedir de ter erros de alocação de memória.

O código a seguir é o código livre de bugs no qual removemos a parte desnecessária que causa o consumo de RAM. Lematizamos a matriz Marks [] para o índice 3 que fica fora de limite no código anterior. Onde no loop, usamos o “<” less-than sign instead of less-than-or-equal-to “<=” in both loops. This prevent the compiler from moving out of bounds. We remove the “temp” string variable because we don't need it anymore. Then, we remove the line of code in which we are trying to limit the size of the “Id” variable to less than “2”. It causes the new keyword to be incorrect. After removing all unnecessary code, we re-execute the code.

#incluir
#incluir
#incluir
usando namespace std;
int main ()

char stud_id [3];
int as marcas [3];
int k;
para (int k = 0; k < 3; k++)
cout<< "Kindly enter an ID:";
CIN >> stud_id;
CIN >> Marcas [K];

cout << endl;
para (k = 0; k < 3; k++)
cout << stud_id[k] <<" "<< marks[k] << endl;

retornar 0;

No código anterior, fizemos algumas alterações para impedir o erro "std :: bad_alloc". Após a execução, a saída é exibida no seguinte. Ele pede ao usuário que insira o ID três vezes no final. O ID e o cálculo médio são exibidos. Desta vez, não importa o valor que estamos passando para ele; Podemos tentar adicionar qualquer valor desejado, para que não exiba nenhum erro.

Conclusão

Neste guia, estudamos um erro que pode ocorrer devido à falha da alocação de memória. É porque, às vezes, os objetos inválidos são transmitidos a ele ou, às vezes, ao escrever o código, usamos a alocação de memória desnecessária que não é necessária e pode causar o consumo da RAM, o que leva ao erro "'std :: bad_alloc'". É difícil entender esse erro, porque temos que ler todo o código para verificar onde ocorre o erro. Explicamos como detectar esses erros e como eles serão resolvidos. Esperamos que isso possa guiá -lo a corrigir esse tipo de problema.