gpt4 book ai didi

c - 返回指针时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:26 25 4
gpt4 key购买 nike

我已经开始学习 C 中的指针了。

当我尝试在函数中返回指针时,出现了segmentation fault 错误。

代码如下:

#include<stdio.h>

int *sum(int *, int *);

int main(void)
{
int a, b;
int *ans = NULL;
printf("Enter number a : ");
scanf("%d", &a);
printf("Enter number b : ");
scanf("%d", &b);

ans = sum(&a, &b);
printf("Sum = %d", *ans);

return 0;
}

int *sum(int *p, int *q)
{
int *result = NULL;
*result = *p + *q;
return (result);
}

输出:

Enter number a : 10
Enter number b : 20
Segmentation fault

result 声明为指针时,sum 函数发生段错误。但是,我无法找出相同的原因。任何与此相关的帮助都非常值得赞赏。

最佳答案

您正在初始化一个指向 NULL 的指针,然后您正在引用它:它是 Undefined behavior

sum函数改为

int *sum(int *p, int *q)
{
int *result = malloc(sizeof(int));

// check if malloc returned a valid pointer before to dereference it
if (result != NULL)
{
*result = *p + *q;
}

return (result);
}

并添加 free调用以释放分配的内存。

    // check if sum function allocate the pointer before to dereference it
if (ans != NULL)
{
printf("Sum = %d", *ans);
}

free(ans);

return 0;
}

你也可以避免使用指针返回值:

#include<stdio.h>

int sum(int *, int *);

int main(void)
{
int a, b;
int ans;
printf("Enter number a : ");
scanf("%d", &a);
printf("Enter number b : ");
scanf("%d", &b);

ans = sum(&a, &b);
printf("Sum = %d\n", ans);

return 0;
}

int sum(int *p, int *q)
{
int result = *p + *q;
return (result);
}

sum 函数也可以是这样的:

int sum (int *p, int *q)
{
return (*p + *q);
}

编辑

正如@JonathanLeffler 在他的回答中所写,您还可以:

#include<stdio.h>

void sum(int *, int *, int *);

int main(void)
{
int a, b;
int ans;
printf("Enter number a : ");
scanf("%d", &a);
printf("Enter number b : ");
scanf("%d", &b);

sum(&ans, &a, &b);
printf("Sum = %d\n", ans);

return 0;
}

void sum(int *result, int *p, int *q)
{
*result = *p + *q;
}

关于c - 返回指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37268707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com