Malloc does not work in C code

1

When trying to compile the code I get the following error messages:

#include<stdio.h>#include<stdlib.h>#defineOK0voidpreencherVetor(int*vetor[],inttamanho){intindice;for(indice=0;indice<tamanho;indice++){printf("Entre com o valor[%d]\n", indice+1);
    scanf("%d", vetor[indice]);
  }
}

void copiarVetor(int* novoVetor[], int* antigoVetor[], int tamanho)
{
  int indice;

  for (indice = 0; indice < tamanho; indice++)
  {
    (*novoVetor[indice]) = (*antigoVetor[indice]);
  }
}

int* somaVetores(int* vetorSoma[]/*, int tamanhoI, int tamanhoII*/)
{
  vetorSoma = (int*) malloc(sizeof (int) * 20);

  int indice = 0;
  int tamanho;
  int tamanhoI;
  int tamanhoII;
  int tamanhoExcedente; //Se os vetores possuírem tamanhos diferentes, o tamanhoExcedente será o tamanho do maior vetor
  int* maiorVetor[20];

  maiorVetor = (int*) malloc(sizeof (int) * 20);

  printf("\nDigite o tamanho do primeiro vetor\n(O valor do tamanho deve pertencer ao intervalo [1,20])\n");
  scanf("%d", &tamanhoI);

  printf("Digite o tamanho do segundo vetor\n(O valor do tamanho deve pertencer ao intervalo [1,20]\n");
  scanf("%d", &tamanhoII);

  int* vetorI[tamanhoI];
  vetorI = (int*) malloc(sizeof (int) * tamanhoI);

  int* vetorII[tamanhoII];
  vetorII = (int*) malloc(sizeof (int) * tamanhoII);

  printf("\nPreencha o primeiro vetor\n");

  preencherVetor(vetorI, tamanhoI);

  printf("\nPreencha o segundo vetor\n");

  preencherVetor(vetorII, tamanhoII);

  while ((tamanhoI >= 1) && (tamanhoI <= 20) && (tamanhoII >= 1) && (tamanhoII <= 20))
  {
    if (tamanhoI < tamanhoII)
    {
      tamanho = tamanhoI;
      tamanhoExcedente = tamanhoII;
      copiarVetor(maiorVetor, vetorII, tamanhoII);
    }

    else if ((tamanhoI) > (tamanhoII))
    {
      tamanho = tamanhoII;
      tamanhoExcedente = tamanhoI;
      copiarVetor(maiorVetor, vetorI, tamanhoI);
    }

    else
    {
      tamanho = tamanhoI; //Como neste caso os dois vetores possuem tamanhos iguais, *tamanho deve ser igual ao tamanho de qualquer um dos vetores
      tamanhoExcedente = tamanhoI;
      copiarVetor(maiorVetor, vetorI, tamanhoI);
    }

    for (indice = 0; indice < tamanho; indice++)
    {
      (*vetorSoma[indice]) = (int) ((*vetorI[indice]) + (*vetorII[indice]));
    }

    indice = tamanho;

    for (indice = tamanho; indice < tamanhoExcedente; indice++)
    {
      (*vetorSoma[indice]) = (*maiorVetor[indice]);
    }

    printf("\nVetor Soma = {");

    printf("%d", (*vetorSoma[0]));

    indice = 1;

    for (indice = 1; indice < tamanhoExcedente; indice++)
    {
      printf(", %d", (*vetorSoma[indice]));
    }

    printf("}\n");

    return *vetorSoma;
  }

  printf("ERRO\n O tamanho de um vetor excede o limite permitido!!!\n");

  return 0;
}



int main()
{
  int opcao;
  int* vetSoma;

  vetSoma = (int*) malloc(sizeof (int) * 20); //vetor soma

  do
  {
    printf("\nCALCULADORA DE VETORES E MATRIZES\n\n");
    printf("1 - Soma de dois vetores\n");
    printf("2 - Produto interno de dois vetores\n");
    printf("3 - Intercalação de dois vetores de 8 posições em um vetor de 16\n");
    printf("4 - Ordenação de um vetor de inteiros em ordem crescente\n");
    printf("5 - Transposta de uma matriz");
    printf("6 - Multiplicação de duas matrizes\n");
    printf("0 - Sair\n");
    scanf("%d", &opcao);

    switch (opcao)
    {
      case 1:
        somaVetores(&vetSoma/*, tamanho1, tamanho2*/);
        break;

      case 0:
        break;

      default:
        printf("Operação não disponível\n");
        break;
    }
  } while(opcao != 0);

    return OK;
}
    
asked by anonymous 16.05.2017 / 22:07

1 answer

1

The first one only generates a warning because it's just a possibility of problems, write like this and should work:

int* vetSoma = malloc(sizeof (int) * 20);

The others can not use malloc() since they are arrays , they are allocated in stack . Contrary to popular belief arrays are not pointers . The same problem I had reported in the previous question occurred. You want to put a letter in the place where you expect a house.

Or turn these arrays into pointers, where you give, or do not use malloc() , which will make it unusable to use heap , then you have to see if that's what need. If you use only the stack you will have to make copies that you may not need.

After posting the code I saw that the first one is like array too and therefore gives the same error, can not do this.

What are and where are the stack and heap?

    
16.05.2017 / 22:27