c - 为什么我会出现段错误? C语言编程

标签 c fault

这是我遇到段错误的代码。我很确定它与引用传递有关,但它让我感到困惑,我不确定我做得是否正确。

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "utils.h"
#define PI 3.1415926535897932384626433832795

int circleStatistics(double radius, double *diameter, double *circumference, double *area){
  *diameter = radius * 2;
  *circumference = PI * radius * 2;
  *area = PI * radius * radius;
  if (radius <= 0 || diameter == NULL || circumference == NULL || area == NULL)
    printf("An error has occured\n");
    return 1;
  }else{
    return 0;
  }
}

现在这是我用来调用该函数并测试它的代码。

#include "utils.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
  // Tests circleStatistics
  double radius = 3;
  double *diameter = NULL, *circumference = NULL, *area = NULL;
  circleStatistics(radius, diameter, circumference, area);
  printf("Expected output: radius = 3, diameter = 6, circumference ~= 18.849555, area ~= 28.2743339\n");
  printf("Actual output: radius = %.0f, diameter = %.0f, circumference ~= %.7f, area ~= %.7f\n", radius, *diameter, *circumference, *area);
}

最佳答案

您正在取消引用指针参数,然后检查它们是否不为 NULL... 尝试这样的事情:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "utils.h"
#define PI 3.1415926535897932384626433832795

int circleStatistics(double radius, double *diameter, double *circumference, double *area){
  if (radius <= 0 || diameter == NULL || circumference == NULL || area == NULL)
    printf("An error has occured\n");
    return 1;
  }else{
    /* now I know, that neither of the arguments point to NULL... */
    *diameter = radius * 2;
    *circumference = PI * radius * 2;
    *area = PI * radius * radius;
    return 0;
  }
}

关于c - 为什么我会出现段错误? C语言编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26346894/

相关文章:

c - localtime() - 段错误

ios - CoreData故障-如何获取数据

java - 检测 Java 异常的责任变量

c - 针对特定结构的 Eclipse CDT c 项目设置

c - 未正确声明数组检测到堆栈粉碎错误

c - 使用 .h 文件中声明的 C 类型

c - 如何找到每个用户的磁盘空间使用情况?

WCF - 抛出异常或 FaultException?

c - C 中宏中的宏

c - 如何将ULONG复制到PUCHAR中