这个问题应该叫做“指针空引用”,产生的原因是因为程序中引用了赋值为空的空指针。
错误代码如下:
#include <stdio.h>
#include <stdlib.h>
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
int i,j;
static int a[2]={0};
for(i=0;i<numsSize-1;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
a[0]=i;
a[1]=j;
*returnSize=2;
return a;
}
}
}
return a;
}
int main()
{
int nums[5]={1,2,3,4,5};
int *c=NULL,*d=NULL;//这里指针c赋值为空
int numsSize=5,target=7;
d=twoSum(nums,numsSize,target,c);//这里错误引用了指针值为空的指针
printf("%d %d",d[0],d[1]);
return 0;
}
这串代码是无法正确跑完的。错误就在于main函数里调用twoSum函数时引用的空指针c。程序就崩了。
可以通过以下几种方法去改正。
因为错误在mian函数里,我就只贴上主函数部分的代码。
//法一:给指针c一个确切的地址指向
int main()
{
int nums[5]={1,2,3,4,5};
int a=2;
int *c=&a,*d=NULL;
int numsSize=5,target=7;
d=twoSum(nums,numsSize,target,c);
printf("%d %d",d[0],d[1]);
return 0;
}
//法二:给c申请一块内存地址
int main()
{
int nums[5]={1,2,3,4,5};
int *c=(int*)malloc(sizeof(int)),*d=NULL;
int numsSize=5,target=7;
d=twoSum(nums,numsSize,target,c);
printf("%d %d",d[0],d[1]);
return 0;
}