从函数内部编辑值

时间:2015-01-22 06:50:03

标签: c

所以我试图从函数内部的main中编辑一个int变量。 当我在main处定义int变量时,它获取一个地址,但是当我将此int变量发送给该函数时,它变为NULL。 这是我在主要的函数调用:

    AB = intersect(A, groupLengthA, B, groupLengthB, AB, &groupLengthAB);

这是我的功能:

int* intersect(int* A, int sizeA, int* B, int sizeB,int* sizeAB)
{ 

int i, j,k=0;
int* AB;

if (sizeA < sizeB)
{
    AB = (int*)malloc(sizeof(int)*sizeA);
    if (AB == NULL)
    {
        printf("***Allocation ERROR***");
        return;
    }
}

else
{
    AB = (int*)malloc(sizeof(int)*sizeA);
    if (AB == NULL)
    {
        printf("***Allocation ERROR***");
        return;
    }
}



for (i = 0; i < sizeA; i++)
{
    for (j = 0; j  < sizeB; j ++)
    {
        if (*(A + i) == *(B + j))
        {

            *(AB + k) = *(A + i);
            k++;
        }
    }
}

*sizeAB = k;
return AB;

}

当我从main中获取sizeAB时,它变为NULL,因此我可以编辑指针内的值。

这是我的主要内容:

void main()
{
    //Variables
    int* A;
    int* B;
    int* AB = NULL;
    int groupLengthA, groupLengthB, i, groupLengthAB = 0 ;


    printf("Please enter the length of group A: \n");
    scanf("%d", &groupLengthA);

    printf("Please enter the length of group B: \n");
    scanf("%d", &groupLengthB);

    A = (int*)calloc(groupLengthA, sizeof(int));
    if (A == NULL)
    {
        printf("***Allocation ERROR***");
            return;
    }

    B = (int*)calloc(groupLengthB, sizeof(int));
    if (B == NULL)
    {
        printf("***Allocation ERROR***");
        return;
    }


    printf("Please fill the content of group A: \n");
    for (i = 0; i < groupLengthA ; i++)
    {
        scanf("%d", (A + i));
    }

    printf("Please fill the content of group B: \n");
    for (i = 0; i < groupLengthB; i++)
    {
        scanf("%d", (B + i));
    }

    printf("Group A: ");
    for (i = 0; i < groupLengthA; i++)
    {
        printf("[%d] ", *(A + i));
    }

    printf("\n");
    printf("Group B: ");
    for (i = 0; i < groupLengthB; i++)
    {
        printf("[%d] ", *(B + i));
    }

    AB = intersect(A, groupLengthA, B, groupLengthB, AB, &groupLengthAB);

        for (i = 0; i < groupLengthAB; i++)
        {
            printf("%d", *(AB + i));
        }

1 个答案:

答案 0 :(得分:0)

问题是你如何调用..你在函数intersect中有5个参数,但你用6来调用它。

将其更改为

AB = intersect(A, groupLengthA, B, groupLengthB, &groupLengthAB);

可选更改

你的如果 else 在函数intersect中执行相同的操作。

您可以更改else

分配内存的方式
AB = (int*)malloc(sizeof(int)*sizeB);

基本上,您尝试分配最小(sizeA,sizeB)字节。