我正在思考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/

10-11 20:53