修复简单 C 程序中的分段错误
Fixing Segmentation Fault in simple C program
我有一个计算 angular 对相关性的 C 程序,代码在其中运行良好。代码中的一行内容类似于
A = B * C
我制作并编译了(编译没问题)一个 .h C 函数,我想将其添加为乘法因子,即我希望它执行此操作
A = B * C * Y(x)
现在,当我 运行 原始代码时,我遇到了分段错误。我怀疑我的 .h 函数有问题(我对 C 不是很熟悉)。我的函数中根本没有使用指针。基本上是这样的
extern double Y(double x)
{
double Z;
Z = polynomial_function_in_x;
return Z;
}
外部是什么?
如果它是内联 .h 函数,您可能希望它是静态的:
static double Y(double x)
{
double z;
z = polynomial_function_in_x;
return polynomial_function_in_x;
}
但是,最好的方法是在线将 header 包含在您的 .h 中,并将完整代码包含在与您的项目一起编译的 .c 中。
.h 文件
double Y(double x);
.c文件
double Y(double x)
{
double z;
z = polynomial_function_in_x;
return polynomial_function_in_x;
}
看起来你根本不需要extern
。
Header 文件应如下所示:
static inline polynomial_function(...)
{
...
}
原始文件包含header,并使用其功能:
#include "poly_headerfile.h"
double Y(double x)
{
return polynomial_function(x);
}
因为它只是一个衬里,而你使用的是 C,IMO 最好的方法是使用宏,在你的头文件中添加以下内容:
#define Y(_x) (polynomial_function_in_x(_x))
在你的 C 文件中你可以使用:
#include "poly_headerfile.h"
int main(int argc, char** argv)
{
A = B * C * Y(x);
return 0;
}
这样会更高效,避免函数的麻烦,记得把参数括起来!
我有一个计算 angular 对相关性的 C 程序,代码在其中运行良好。代码中的一行内容类似于
A = B * C
我制作并编译了(编译没问题)一个 .h C 函数,我想将其添加为乘法因子,即我希望它执行此操作
A = B * C * Y(x)
现在,当我 运行 原始代码时,我遇到了分段错误。我怀疑我的 .h 函数有问题(我对 C 不是很熟悉)。我的函数中根本没有使用指针。基本上是这样的
extern double Y(double x)
{
double Z;
Z = polynomial_function_in_x;
return Z;
}
外部是什么?
如果它是内联 .h 函数,您可能希望它是静态的:
static double Y(double x)
{
double z;
z = polynomial_function_in_x;
return polynomial_function_in_x;
}
但是,最好的方法是在线将 header 包含在您的 .h 中,并将完整代码包含在与您的项目一起编译的 .c 中。
.h 文件
double Y(double x);
.c文件
double Y(double x)
{
double z;
z = polynomial_function_in_x;
return polynomial_function_in_x;
}
看起来你根本不需要extern
。
Header 文件应如下所示:
static inline polynomial_function(...)
{
...
}
原始文件包含header,并使用其功能:
#include "poly_headerfile.h"
double Y(double x)
{
return polynomial_function(x);
}
因为它只是一个衬里,而你使用的是 C,IMO 最好的方法是使用宏,在你的头文件中添加以下内容:
#define Y(_x) (polynomial_function_in_x(_x))
在你的 C 文件中你可以使用:
#include "poly_headerfile.h"
int main(int argc, char** argv)
{
A = B * C * Y(x);
return 0;
}
这样会更高效,避免函数的麻烦,记得把参数括起来!