Error in vector size

Asked

Viewed 60 times

-1

I’m having a little problem here in my code, well "everything" works normal except when I type that the struct vector size will be 2, program simply stops working.

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

typedef struct produto{
 int id;
 char nome [20];
 int qtdEstoque;
 float valorVenda;
 float valorCusto;
}produto;

void leitura(struct produto *lista, int size){
  int i;
    for(i = 0; i <= size; i++){
       fflush(stdin);
       printf("Nome: ");
       gets(lista[i].nome);
       printf("Id: ");
       scanf("%d", &lista[i].id);
       printf("Quantidade em estoque: ");
       scanf("%d", &lista[i].qtdEstoque);
       printf("Valor da venda: ");
       scanf("%f", &lista[i].valorVenda);
       printf("Valor do custo: ");
      scanf("%f", &lista[i].valorCusto);
      printf("\n");
 }
}

void imprimir(struct produto *lista, int size){
   int i;
   printf("*** IMPRIMINDO TODOS OS DADOS ***\n\n");
   for(i = 0; i <= size; i++){
      printf("Nome: %s", lista[i].nome);
      printf("\nId: %d", lista[i].id);
      printf("\nQtd Estoque: %d", lista[i].qtdEstoque);
      printf("\nValor Venda: %2.f", lista[i].valorVenda);
      printf("\nValor Custo: %2.f", lista[i].valorCusto);
      printf("\n\n");
  }
}

void totalMenor(struct produto *lista, int size){
  int i;
  printf("*** PRODUTOS COM ESTOQUE MENOR QUE 5 ***\n\n");
  for(i = 0; i <= size; i++){
      if(lista[i].qtdEstoque < 5){
          printf("Nome: %s", lista[i].nome);
          printf("\nId: %d", lista[i].id);
          printf("\n\n");
      }
  }
}

void maiorLucro(struct produto *lista, int size){
  float maior = 0;
  int endereco = 0;
  int i;
  printf("\n*** PRODUTO MAIOR LUCRO ***\n\n");
  for(i = 0; i <= size; i++){
      if(lista[i].valorCusto > maior){
          maior = lista[i].valorCusto;
          endereco = i; 
      }
  }
  printf("Produto com maior lucro:    \n\nNome: %s\nQuantidade em estoque: 
  %d", lista[endereco].nome, lista[endereco].qtdEstoque);
}

void menorLucro(struct produto *lista, int size){
  float menor = 9999;
  int endereco = 0;
  int i;
  printf("\n\n*** PRODUTO MENOR LUCRO ***\n\n");
  for(i = 0; i <= size; i++){
      if(lista[i].valorCusto < menor){
          menor = lista[i].valorCusto;
          endereco = i;
      }
  }
  printf("\nProduto com menor lucro:   \n\nNome: %s\nQuantidade em estoque: 
  %d", lista[endereco].nome, lista[endereco].qtdEstoque);
}


int main(){
  int tamanho;
  printf("Digite o tamanho da estrutura: ");
  scanf("%d", &tamanho);


  struct produto *produtos[tamanho];
  produtos[0] = (struct produto *)  malloc ( tamanho * sizeof(struct 
  produto));


  leitura(produtos[tamanho],tamanho);
  imprimir(produtos[tamanho],tamanho);
  totalMenor(produtos[tamanho],tamanho);
  maiorLucro(produtos[tamanho],tamanho);
  menorLucro(produtos[tamanho],tamanho);

  free(produtos[0]);
}

1 answer

0


The Error is in its main:

 struct produto *produtos[tamanho];
  produtos[0] = (struct produto *)  malloc ( tamanho * sizeof(struct 
  produto));

It is not the correct way to allocate a struct vector. The correct form would be like this:

  struct produto* produtos;
  produtos = (struct produto*) malloc(tamanho*sizeof(struct produto));

Also, as you gave a product typedef in your struct:

typedef struct produto{
 int id;
 char nome [20];
 int qtdEstoque;
 float valorVenda;
 float valorCusto;
}produto;

So you could write "product" instead of "product struct"

  • Maik thank you very much, it worked ! but after performing all the functions the program stops working the same way.

  • Your for(i = 0; i <= size; i++) should be: for(i = 0; i < size; i++) the way you did, you are accessing memory not available.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.