所以我试图从函数内部的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));
}
答案 0 :(得分:0)
问题是你如何调用..你在函数intersect
中有5个参数,但你用6来调用它。
将其更改为
AB = intersect(A, groupLengthA, B, groupLengthB, &groupLengthAB);
可选更改
你的如果和 else 在函数intersect
中执行相同的操作。
您可以更改else
中
AB = (int*)malloc(sizeof(int)*sizeB);
基本上,您尝试分配最小(sizeA,sizeB)字节。