Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分段错误,我不知道原因_C_Segmentation Fault_Stdio - Fatal编程技术网

C 分段错误,我不知道原因

C 分段错误,我不知道原因,c,segmentation-fault,stdio,C,Segmentation Fault,Stdio,实际上,我尝试生成并填充随机矩阵,并将其保存为纯文本txt,但当我尝试生成1000多个文件时出现了问题,这些文件相当于工作目录中的2000个文件 我想知道原因和解决办法 我使用gcc code.c编译此代码,并使用/a.out运行可能更改第25行中生成的矩阵编号: cant = 1000; // THIS GENERATE 1000 FILES OF CURRENT MATRIX. 代码c: 解决方案=D 谢谢Chistopher和Vallabh 我认为对我来说,这个错误是一个疏忽 关闭(p

实际上,我尝试生成并填充随机矩阵,并将其保存为纯文本txt,但当我尝试生成1000多个文件时出现了问题,这些文件相当于工作目录中的2000个文件

我想知道原因和解决办法

我使用
gcc code.c
编译此代码,并使用
/a.out运行可能更改第25行中生成的矩阵编号:

cant = 1000; // THIS GENERATE 1000 FILES OF CURRENT MATRIX.
代码c:
解决方案=D

谢谢Chistopher和Vallabh

我认为对我来说,这个错误是一个疏忽

关闭(puntero_f); 关闭(puntero_b)

非常感谢您的解释,我想在对文件有了更清晰的概念之后,我会有它们的

最终被理解为邮政编码,所以我把解决方案留给那些将来可能有用的人

非常感谢;)


#包括
#包括
#包括
#包括
//我们可以通过预处理使记忆有效
#定义F(i,j)F[i*col+j]
#定义B(i,j)B[i*col+j]
浮动随机浮动(浮动最小值,浮动最大值){
返回((浮动)rand()/(浮动)rand_MAX);
}
int i、j、T步骤、fil、col、CONT;
int main(int argc,char*argv[]){
字符名称[50];/=”;
字符名为[50];/=”;
文件*puntero_f;
文件*puntero_b;
fil=2;
col=2;
铁路超高=1000;
int tam=fil*col;
float*F=calloc(tam,sizeof(float));
float*B=calloc(tam,sizeof(float));
//srand((无符号)时间(NULL));
int-archi=0;

对于(tstep=0;tstep而言,问题在于对()的调用

open()/close()使用文件描述符,这些描述符是int

fopen()/fclose()处理文件*


您的代码中的问题是poitner可以转换为int,因此代码可以编译,但结果是崩溃!我使用fclose()编译了您的代码,它工作得非常好。

您不应该将
fopen()
close()
open()
fclose()

在代码中使用
fclose()

fopen()


如@christopher
close()/open()
处理文件描述符,而
fopen()/fclose()处理文件描述符
处理
文件
指针。

除非我们看到您的实际源代码,否则我们无法提供帮助。您发布的内容将无法编译。它至少缺少两个
#include
指令以及
Dato
随机浮动
的声明。如果
Dato
是一个函数,则调用不能出现在a assignment.复制并粘贴编译到问题中的实际代码。2个问题:您是否尝试过使用fclose()而不是close()?您确认磁盘上有足够的空间了吗?seg错误的确切文本通常有有用的信息。@KeithThompson函数调用可以出现在赋值的左侧,只要它返回可赋值的内容。在这种情况下,我猜它会返回对输入数组中某个特定浮点的引用。但是如果
Dato
中有一个错误,它返回了一个野生引用,这可以解释崩溃的原因。@Christophe:我刚刚注意到gcc实际上没有警告
close
调用,除非您要求它发出警告(这很不幸)。根据“gnu89”/“gnu90”的规则默认情况下,它执行的方言为
close
。使用
-std=c99
-std=gnu99
编译时确实会产生警告。但问题中的代码可能会得到许多其他警告(有些是因为缺少必须在原始代码中的代码,但OP没有显示给我们)。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

//  Usando Preprocesado para manejar las matrices y tener acceso eficiente a memoria
    #define F(i,j) F[i*col +j]  
    #define B(i,j) B[i*col +j]

float randfloat(float min, float max){    
    return ((float) rand() / (float) RAND_MAX);   
}

int i, j, tstep, fil, col, cant;

int main(int argc, char *argv[]){

    char nombre_b[50] ;     //= "";
    char nombre_f[50] ;     //= "";      
    FILE *puntero_f;
    FILE *puntero_b;

    fil = 2;
    col = 2;
    cant = 1000;

    int tam = fil*col;
    float *F = calloc(tam,sizeof(float));
    float *B = calloc(tam,sizeof(float));

    //srand((unsigned)time(NULL));

    int archi = 0;
    for (tstep=0; tstep<cant; tstep++){

        sprintf(nombre_f, "Forward%d.txt", tstep);
        sprintf(nombre_b, "Backward%d.txt", tstep);
        puntero_f = fopen(nombre_f, "a+");
        puntero_b = fopen(nombre_b, "a+");

        for(i = 0; i<fil; i++){
            for(j = 0; j<col; j++){
                F(i,j) = randfloat(0.0f, 1.0f);
                B(i,j)  = randfloat(0.0f, 1.0f);

                if(tstep==archi){
                    fprintf(puntero_f,"%f ", F(i,j));
                    fprintf(puntero_b,"%f ", B(i,j));
                }
            }
            if(tstep==archi){
                fprintf(puntero_f,"\n");
                fprintf(puntero_b,"\n");
            }
        }
        archi++;
        fclose(puntero_f);
        fclose(puntero_b);
    }

    return 0;
}