使用指针不起作用的代码

时间:2017-03-12 17:06:33

标签: c pointers

我正在尝试创建一个简单的函数来解析数组并将其复制到另一个数组中。间隔内的所有值。这是代码:

#include<stdio.h>
#define LEN 5

int* vediValori(int *valori, int inf, int sup, float *media);

int main()
{
    int val[LEN] = {10,20,30,40,50}, inf, sup, *valScelti = NULL;
    float media = 0.0;

    printf("Inserisci estremo inferiore: ");
    scanf("%d", &inf);

    printf("Inserisci estremo superiore: ");
    scanf("%d", &sup);

    printf("\nVerranno ora isolati tutti i valori compresi fra gli estremi...\n");

    valScelti = vediValori(val, inf, sup, &media);

    printf("\nNUOVO VETTORE CREATO:\n\n");

    for(int i = 0; i < LEN; i++)
    {
        printf("%d\n", valScelti[i]);
    }
}

int* vediValori(int *valori, int inf, int sup, float *media)
{
    int *tmp, i = 0, j = 0;

    while(i < LEN)
    {
        if(*(valori+i) >= inf && *(valori+i) <= sup)
        {
            *(tmp+j) = *(valori+i);
            *media += *(valori+i);

            j++;
        }
        i++;
    }

    return tmp;
}

为什么这不起作用?它在哪里不正确???任何帮助将不胜感激,谢谢:)

1 个答案:

答案 0 :(得分:-1)

您没有在vediValori函数中为tmp分配内存。

int* vediValori(int *valori, int inf, int sup, float *media)
{
    //Edit: No need to type-case `void *` returned by malloc so
    int *tmp = malloc(sizeof(int)*(sup-inf)), i = 0, j = 0;

    //int *tmp = (int *)malloc(sizeof(int)*(sup-inf)), i = 0, j = 0;
    //            /\
    //          Not Needed   

while(i < LEN)
{
    if(*(valori+i) >= inf && *(valori+i) <= sup)
    {
        *(tmp+j) = *(valori+i);
        *media += *(valori+i);

        j++;
    }
    i++;
}

return tmp;
}

这可能有用 信用melpomene和this