在 c 中写入文件时出现分段错误



我已经没有希望和想法了。我一直在尝试调试这个简单的代码,它应该在文件中创建一个简单的表,3 天。运行它时我总是遇到隔离错误。我是 c 的新手,但我知道什么是分段错误。我似乎无法在这里修复它。运行编译后的代码时,它确实会创建一个具有正确名称的空文件,但随后发生了错误,我保留了一个新的但完全为空的文件。所以问题,我想,介于fopen和第一个fprintf之间。有什么想法吗?

#include <stdio.h>
#include <math.h>
void calc23(float x, float *f1, float *f2){
    *f1 = pow(x,2)-4.0*x+8.0;
    *f2 = pow(x,3)+2.0*x;
}
void main(){
    FILE *datf;
    datf = fopen("mydatatable.data", "w");
    float *f1, *f2;
    float r = -2.0;
    for(int i=1; i<100; i++){
        calc23(r, f1, f2);
        fprintf(datf, "%f %f %f n", r, *f1, *f2);
        r += (4.0/99.0);
    }
    fclose(datf);
}
指向

浮点f1f2的指针未初始化。使它们成为简单的浮点变量,并使用地址运算符传递它们

float f1, f2;
calc23(x, &f1, &f2);
printf("..", f1, f2);

以下建议的代码:

  1. 干净地编译
  2. 不会 SEG 故障,因为没有未定义的行为会导致 SEG 故障
  3. 正确检查系统功能中的错误
  4. 文档为什么包含每个头文件
  5. 更正问题注释中列出的问题
  6. 选择使用 powf() 而不是 pow(),因此所有值(和文本(都具有类型 float

现在建议的代码:

#include <stdio.h>   // fopen(), fclose(), fwrite(), FILE
#include <stdlib.h>  // exit(), EXIT_FAILURE
#include <math.h>    // powf()
// prototypes
void calc23(float x, float *f1, float *f2);

int main( void )
{
    FILE *datf = fopen("mydatatable.data", "w");
    if( !datf )
    {
        perror( "fopen to write mydatatable.data failed");
        exit( EXIT_FAILURE );
    }
    // implied else, fopen successful
    float f1;
    float f2;
    float r = -2.0f;
    for(int i=1; i<100; i++)
    {
        calc23(r, &f1, &f2);
        fprintf(datf, "%f %f %f n", r, f1, f2);
        r += (4.0f/99.0f);
    }
    fclose(datf);
}

void calc23(float x, float *f1, float *f2)
{
    *f1 = powf(x,2.f)-4.0f*x+8.0f;
    *f2 = powf(x,3.f)+2.0f*x;
}

程序输出的前几行:

-2.000000 20.000000 -12.000000 
-1.959596 19.678400 -11.444072 
-1.919192 19.360065 -10.907337 
-1.878788 19.044994 -10.389402 

程序输出的最后几行:

1.838385 4.026119 9.889888 
1.878789 4.014692 10.389421 
1.919193 4.006530 10.907358 
1.959597 4.001633 11.444093 

简单的调试代码: F1 和 F2 未初始化

相关内容

  • 没有找到相关文章

最新更新