Jump to content
Sign in to follow this  
polska

Programa dá erro: "Stack around the variable 'p' was corrupted"

Recommended Posts

polska

Boas pessoal, realizei mais um exercício das ONI, e o programa fez tudo direito como era esperado, contudo, mesmo no final da execução, acusou um erro, Stack around the variable 'p' was corrupted . Ou seja, ele faz o output direito mas antes de encerrar o programa da aquele erro.

O programa é este:

#include <stdio.h>
#include <string.h>

int v[10000],ultimo=0;

void adiciona(int energia){
v[ultimo]=energia;
ultimo++;
}

void retiraMAX(){
int maior=v[0],pos=0;
for(int i=1;i<ultimo;i++){
	if(v[i]>maior){
		maior=v[i];
		pos=i;
	}
}
printf("%d\n",maior);
for(int i=pos;i<ultimo;i++){
	v[i]=v[i+1];
}
ultimo--;
}

void retiraMIN(){
int menor=v[0],pos=0;
for(int i=1;i<ultimo;i++){
	if(v[i]<menor){
		menor=v[i];
		pos=i;
	}
}
printf("%d\n",menor);
for(int i=pos;i<ultimo;i++){
	v[i]=v[i+1];
}
ultimo--;
}


int main(){
int A,R,E;
char p[3];
do{
	scanf("%d %d",&A,&R);
}while(A<2 || A>100000 || R<2 || R>10000 || A+R>1000);
for(int i=1;i<=A+R;i++){
	scanf("%s",p);
	if(strcmp(p,"BAK")==0){
		do{
			scanf("%d",&E);
		}while(E<2 || E>1000000);
		adiciona(E);
	}
	if(strcmp(p,"MAX")==0){
		retiraMAX();
	}
	if(strcmp(p,"MIN")==0){
		retiraMIN();
	}
}
return 0;
}

Alguém me consegue ajudar??


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
pmg

cahr p[3];

Reserva espaco para strings com, no maximo, 2 caracteres e o terminador '\0'.

Aparentemente estas a meter la mais do que isso.

Sugestao: (depois de corrigires o erro apontado acima) limita o numero de caracters que o scanf mete na string:

scanf("%3s", p);


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
polska

cahr p[3];

Reserva espaco para strings com, no maximo, 2 caracteres e o terminador '\0'.

Aparentemente estas a meter la mais do que isso.

Sugestao: (depois de corrigires o erro apontado acima) limita o numero de caracters que o scanf mete na string:

scanf("%3s", p);

Coloquei a char com tamanho 5 e limitei a leitura, já deu certo, Obrigado ;D


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.