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.
Question
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!
Edited by DH FerrazLink to comment
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.