我正在思考leetcode问题167,但是我的代码出现问题Segmentation Fault (SIGSEGV)
。
下面是我的C代码,预期的答案是[1,3]。
#include<stdio.h>
#include<stdlib.h>
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
int i=0,j=0;
for(i=0;i<numbersSize;i++)
{
for(j=i+1;j<numbersSize;j++)
{
if(numbers[i]+numbers[j]==target)
{
*returnSize = 2;
int *indexes = malloc(*returnSize * sizeof(int));
indexes[0] = i + 1;
indexes[1] = j + 1;
return indexes;
}
}
}
*returnSize = 0;
return NULL;
}
int main()
{
int arr[]={2,3,4};
int *a;
int *p=twoSum(arr,3,6,a);
printf("%d,%d",*p,*(p+1));
return 0;
}
https://ide.geeksforgeeks.org/Mk0sgwTsZf
最佳答案
首先,a
未初始化,您可以调用malloc函数分配内存或将指针传递给本地int a
变量
int a;
int *p=twoSum(arr,3,6,&a);
其次,您的
twoSum
函数可以返回NULL值,因此,如果不为NULL,则应添加条件以检查此返回值int a;
int *p=twoSum(arr,3,6,&a);
if(p)
printf("%d,%d",*p,*(p+1));
关于c - 使用指针的段错误(SIGSEGV),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51647802/