tive essa questão em uma prova de C++ e ainda não estou conseguindo resolver o problema. A idéia é criar um vetor com x posições(no meu caso coloquei 5 pra teste), o usuário preenche essas 5 posições e após isso o sistema pergunta se ele deseja cadastrar mais uma posição no vetor, se SIM o vetor é incrementado em mais uma posição e o usuário digita o valor pra essa nova posição, se NÃO o sistema imprime o vetor. Está funcionando apenas para o primeiro incremento, ou seja, tenho o vetor começando em 5 posições, preencho as 5, informo que quero mais uma, ele incrementa uma posição a mais deixando o vetor com 6 posições, informo o valor pra 6ª posição do vetor, mas se informo que quero continuar aumentando o vetor, ou seja, torna-lo um vetor de 7 posições, o sistema da erro.
Segue o código:
#include <iostream>
using namespace std;
void main(){
int tam = 5;
char op;
bool ret = true;
float * ptr = new(nothrow) float[tam];
for(int i = 0; i < tam; i++){
cout << "Valor da posicao[" << i << "]: ";
cin >> ptr;
}
cout << endl;
do{
cout << "Deseja inserir mais algum valor pro vetor (S/N)?";
cin >> op;
cout << endl;
if(op == 'S' || op == 's'){
//CRIA UM NOVO VETOR COMO AUX
float * aux = new(nothrow) float[tam];
//COPIA PARA O VETOR AUX O CONTEUDO DO VETOR PTR
for(int j = 0; j < tam; j++){
aux[j] = ptr[j];
}
//DELETA E CRIA NOVAMENTE O VETOR ORIGINAL
delete []ptr;
ptr = new(nothrow) float[tam++];
//INSERE OS DADOS DO VETOR AUX NOVAMENTE NO VETOR PTR
for(int k = 0; k < tam - 1; k++){
ptr[k] = aux[k];
}
//DELETA O VETOR AUX
delete []aux;
//SOLICITA AO USUARIO O VALOR DA NOVA POSICAO
for(int l = 0; l < tam; l++){
if(ptr[l] < 0){
cout << "Valor da posicao[" << l << "]: ";
cin >> ptr[l];
}
}
cout << endl;
} else {
//IMPRIME O VETOR FINALIZADO
for(int m = 0; m < tam; m++){
cout << ptr[m] << endl;
}
ret = false;
cout << endl;
}
} while(ret == true);
}
O erro informado é esse:
HEAP CORRUPTION DETECTED: CTR detected that the application wrote to memory after end of heap buffer
Podem me ajudar?
Sou novo no Fórum, espero ter feito tudo corretamente.
Pergunta
DH Ferraz
Olá,
tive essa questão em uma prova de C++ e ainda não estou conseguindo resolver o problema. A idéia é criar um vetor com x posições(no meu caso coloquei 5 pra teste), o usuário preenche essas 5 posições e após isso o sistema pergunta se ele deseja cadastrar mais uma posição no vetor, se SIM o vetor é incrementado em mais uma posição e o usuário digita o valor pra essa nova posição, se NÃO o sistema imprime o vetor. Está funcionando apenas para o primeiro incremento, ou seja, tenho o vetor começando em 5 posições, preencho as 5, informo que quero mais uma, ele incrementa uma posição a mais deixando o vetor com 6 posições, informo o valor pra 6ª posição do vetor, mas se informo que quero continuar aumentando o vetor, ou seja, torna-lo um vetor de 7 posições, o sistema da erro.
Segue o código:
#include <iostream>
using namespace std;
void main(){
int tam = 5;
char op;
bool ret = true;
float * ptr = new(nothrow) float[tam];
for(int i = 0; i < tam; i++){
cout << "Valor da posicao[" << i << "]: ";
cin >> ptr;
}
cout << endl;
do{
cout << "Deseja inserir mais algum valor pro vetor (S/N)?";
cin >> op;
cout << endl;
if(op == 'S' || op == 's'){
//CRIA UM NOVO VETOR COMO AUX
float * aux = new(nothrow) float[tam];
//COPIA PARA O VETOR AUX O CONTEUDO DO VETOR PTR
for(int j = 0; j < tam; j++){
aux[j] = ptr[j];
}
//DELETA E CRIA NOVAMENTE O VETOR ORIGINAL
delete []ptr;
ptr = new(nothrow) float[tam++];
//INSERE OS DADOS DO VETOR AUX NOVAMENTE NO VETOR PTR
for(int k = 0; k < tam - 1; k++){
ptr[k] = aux[k];
}
//DELETA O VETOR AUX
delete []aux;
//SOLICITA AO USUARIO O VALOR DA NOVA POSICAO
for(int l = 0; l < tam; l++){
if(ptr[l] < 0){
cout << "Valor da posicao[" << l << "]: ";
cin >> ptr[l];
}
}
cout << endl;
} else {
//IMPRIME O VETOR FINALIZADO
for(int m = 0; m < tam; m++){
cout << ptr[m] << endl;
}
ret = false;
cout << endl;
}
} while(ret == true);
}
O erro informado é esse:
HEAP CORRUPTION DETECTED: CTR detected that the application wrote to memory after end of heap buffer
Podem me ajudar?
Sou novo no Fórum, espero ter feito tudo corretamente.
Abraço!
Editado por DH FerrazLink 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.