Jump to content
Elyst

erro em funções

Recommended Posts

Elyst

Boas, estou com um problema numas funções e precisa de um segundo par de olhos (ou mais alguns) para perceber onde está o problema.

O objectivo do programa é simples, cria um vector com o tamanho definido pelo utilizador e depois verifica se o vector ficou com o tamanho inicialmente dito pela pessoa. Depois redimensiona o vector para um novo tamanho igualmente definido pelo utilizador.

É simples, funcionou como queria, até dividir por funções para simplificar o main.

Vejam se descobrem o(s) erro(s)

#include <stdio.h>
#include <stdlib.h>

void definir_vector (int *vector, quant)
{
  vector = (int*) malloc(quant * sizeof(int));
  if(ptr == NULL) printf("erro.");
return 0;
}

/*#####################################################################################*/


void redefinir_vector (int *vector, quant)
{
  vector = realloc(vector, quant);
  if(ptr == NULL) printf("erro.");
return 0;
}

/*#####################################################################################*/


void verifica_vector (int *vector, quant)
{
  for(i=0;i<quant;i++)
cont++;

printf("o vector tem %d slots \n", quant);
}


/*#####################################################################################*/

int main ()
{
int i, *vector = NULL, quant, cont=0;

printf("qual o tamanho do seu vector? ");
scanf("%d",&quant);

definir_vector (int &vector, quant);

verifica_vector (int *vector, quant);

printf("redimensionar o vector para : ");
scanf("%d",&quant);

redefinir_vector (int &vector, quant);

verifica_vector (int *vector, quant);

return 0;
}

e a lista de erros

vectorsize2.c:4: error: expected declaration specifiers or ‘...’ before ‘quant’
vectorsize2.c: In function ‘definir_vector’:
vectorsize2.c:6: error: ‘quant’ undeclared (first use in this function)                                    
vectorsize2.c:6: error: (Each undeclared identifier is reported only once                                  
vectorsize2.c:6: error: for each function it appears in.)                                                  
vectorsize2.c:7: error: ‘ptr’ undeclared (first use in this function)                                      
vectorsize2.c:8: warning: ‘return’ with a value, in function returning void                                
vectorsize2.c: At top level:                                                                               
vectorsize2.c:14: error: expected declaration specifiers or ‘...’ before ‘quant’                           
vectorsize2.c: In function ‘redefinir_vector’:                                                             
vectorsize2.c:16: error: ‘quant’ undeclared (first use in this function)
vectorsize2.c:17: error: ‘ptr’ undeclared (first use in this function)
vectorsize2.c:18: warning: ‘return’ with a value, in function returning void
vectorsize2.c: At top level:
vectorsize2.c:24: error: expected declaration specifiers or ‘...’ before ‘quant’
vectorsize2.c: In function ‘verifica_vector’:
vectorsize2.c:26: error: ‘i’ undeclared (first use in this function)
vectorsize2.c:26: error: ‘quant’ undeclared (first use in this function)
vectorsize2.c:27: error: ‘cont’ undeclared (first use in this function)
vectorsize2.c: In function ‘main’:
vectorsize2.c:42: error: expected expression before ‘int’
vectorsize2.c:44: error: expected expression before ‘int’
vectorsize2.c:49: error: expected expression before ‘int’
vectorsize2.c:51: error: expected expression before ‘int’

Desmotiva um bocado receber assim uma lista enorme de erros... e se calhar até é uma coisa insignificante que estou a fazer mal.

Obg

Cumps


“The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.”(Seymour Cray)

Share this post


Link to post
Share on other sites
RSFalcon7

perdes-te cinco min a ler os erros?

no primeiro diz que o quant não tem tipo de dados

no segundo estas a usar ptr ao invés de vector

e assim continua...

o que o compilador não te diz é que não podes verificar o tamanho de um array daquela maneira...

tens mesmo que ter uma variável que gere o tamanho do array, caso contrário, ele vai continuar lendo até quant ou até Segmentation fault

Share this post


Link to post
Share on other sites
KTachyon

Acredita que já tive programas que, compilados, tinham mais de 1000 linhas de código. Alterei uma linha e resolvi todos os erros.

Por vezes o número de erros que o compilador mostra nada tem a haver com o número de erros que existem efectivamente no teu código.

O ideal é desenvolveres as coisas aos poucos e compilares regularmente para impedir que chegues ao fim e tenhas que descobrir porque é que todas as linhas de código têm erros.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Elyst

Creio que fiquei um pouco desmotivado pelos erros, muito provavelmente estará no declarar das funções.

RSFalcon7 dizes que não posso verificar o tamanho de um array daquela maneira.

Como assim? Faço um malloc que inicialmente gera um vector pelo tamanho definido por quant. Mesmo mais tarde ao redimensionar o vector, quant é sempre o valor de espaços que o vector tem.

Não entendi muito bem a tua sugestão, como sugeres então que meça o tamanho de um vector?


“The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.”(Seymour Cray)

Share this post


Link to post
Share on other sites
AlexPnt

Acho primeiro que deves procurar resolver os erros que são básicos e que não têm nada a ver com o algoritmo estar mal ou não.

Ou seja aqueles erros de sintaxe que se evitam conhecendo as regras e que  devem ser aprendidos antes de se começar logo a programar assim à campeão.

A maior parte dos teus erros são:

->falta de imensas declarações.

->a chamada de funções é mal feita.

-> não há coerência entre o que a função é suposto devolver e o que realmente devolve.

Quando conseguires ultrapassar estes erros básicos então podes começar a pensar em resolver os outros, porque também os há.  :P


Programming is an art form that fights back.

Share this post


Link to post
Share on other sites
Localhost

Exactamente como o AlexPnt disse... enquanto os erros forem mesmo de sintaxe menos mal. O problema mesmo é que quando são erros de algoritmo, mais conhecido como bug.


here since 2009

Share this post


Link to post
Share on other sites
RSFalcon7

sobre os erros de sintaxe o melhor é andares a porrada com o compilador...

sobre os arrays...

Todos os arrays são, na verdade, apontadores de memória (pronto, falei!) quando fazes a[50] o que o compilador faz é *(a+50) ou alguma coisa equivalente.

Assim, quando declaras um array de tamanho 4 e a seguir fazes array[4] (o 4 não existe, pois é desde 0 até 4-1) o compilador vai aquela zona de memória e copia o que lá estiver, se tiveres acesso a essa zona, ele não se queixa, apesar do comportamento ser desconhecido (não tens como prever o que lá está), mas se não tiveres privilégios para ler aquela zona (normalmente quando é de outro processo) vai dar erro (já não lembro qual erro, talvez falha de segmentação).

A solução: sempre que fazer malloc(tamanho * sizeof(int? )) guardas o tamanho junto com o array, se alteras o tamanho do array, tens que alterar a memória dele e a variável que representa o seu tamanho.

o melhor é fazeres umas experiências com apontadores para perceberes bem, as strings dinâmicas são boas para isso!

aah... as strings são boas porque são uma espécie de array, mas ao invés de ter tamanho definido, têm a terminação especial do \0, por isso quando esqueces o \0 da sempre asneiras, a minha melhor experiência foi copiar para uma string outra sem o \0 (experimenta que é bonito)

Share this post


Link to post
Share on other sites
brunoais

está), mas se não tiveres privilégios para ler aquela zona (normalmente quando é de outro processo) vai dar erro (já não lembro qual erro, talvez falha de segmentação).

Yep... segmentation fault

a minha melhor experiência foi copiar para uma string outra sem o \0 (experimenta que é bonito)

É! É uma festa para encontrar aonde está o segmentation fault de chorar por menos. Já tive umas 15h à procura do raio de um erro por causa de algo parecido. Eram umas 20000 linhas de código (em vários ficheiros) e foi uma boa festa qd encontramos um erro minúsculo desse tipo.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
KTachyon

Yep... segmentation faultÉ! É uma festa para encontrar aonde está o segmentation fault de chorar por menos. Já tive umas 15h à procura do raio de um erro por causa de algo parecido. Eram umas 20000 linhas de código (em vários ficheiros) e foi uma boa festa qd encontramos um erro minúsculo desse tipo.

É para isso que serve o debugger :thumbsup: Em vez de 15h terias demorado 5 min.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

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

×
×
  • 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.