polska Posted April 9, 2012 at 06:55 PM Report #448268 Posted April 9, 2012 at 06:55 PM 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.
pmg Posted April 9, 2012 at 07:42 PM Report #448276 Posted April 9, 2012 at 07:42 PM 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!
polska Posted April 9, 2012 at 08:04 PM Author Report #448278 Posted April 9, 2012 at 08:04 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now