Segmentation failure using realloc function

Asked

Viewed 35 times

0

Hello, I have a function that should receive values from an intersection and if you enter a value I should relocate more memory and return this pointer. Analyzing the problem, it seems to me to be time to relocate and return the pointer.

follows the code

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

#define tam 10

void InsertVetorValores(int vetor[], int comprimento, char *frase);
int* intersecao(int valor, int *p);

int main()
{
    int A[tam];
    int B[tam];

    int *vetor = (int *) malloc(sizeof(int));
    vetor[0] = NULL;

    // injetando valores no vetor A
    InsertVetorValores(A, tam, "º valor, vetor A:\n");

    // injetando valores no vetor B
    InsertVetorValores(B, tam, "º valor, vetor B:\n");    

    // linha do vetor A
    for (int i = 0; i < tam; i++)
    {
        // liha do vetor B
        for (int j = 0; j < tam; j++)
        {
            // verificando a existência de uma interseção
            if (A[i] == B[j])
            {
                vetor = intersecao(A[i], vetor);
            }   
        }  
    }

    printf("INTERSEÇÃO: ");

    int comprimento = sizeof(vetor) / sizeof(int);

    for (int i = 0; i < comprimento; i++)
    {
        if (vetor[i] != NULL)
        {
            printf("%d ", vetor[i]);
        }
    }
    printf("\n");
    free(vetor);
    return 0;
}

void InsertVetorValores(int vetor[], int comprimento, char *frase)
{
    for (int i = 0; i < comprimento; i++)
    {
        printf("%d %s\n", i+1, frase);
        scanf("%d", &vetor[i]);
        printf("\n");
    }
}

int* intersecao(int valor, int *p)
{
    int aux = 0;
    int comprimento = sizeof(p) / sizeof(int);

    printf("comprimento: %d\n", comprimento);

    if (p[0] == NULL)
    {
        comprimento++;
        p = (int *) realloc(p, sizeof(int) * comprimento);
        p[0] = valor;
        return p;
    }


    for (int i = 0; i < comprimento; i++)
    {
        if (p[i] == valor)
        {
            aux = 1;
        }
    }

    if (aux == 0)
    {
       for (int i = 0; i < comprimento; i++)
       {
           if (p[i] == NULL)
           {
               comprimento++;
               p = (int *) realloc(p, sizeof(int) * comprimento);
               p[i] = valor;
               return p;
           }  
       }
    }
    return p;
}


1 answer

0

Looking at the code, it seems that a return is missing in the intersection routine.
Try placing a return command at the end of the routine:

return p; 

Browser other questions tagged

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