当我尝试在c代码中打开.dat文件时出现问题。可能我所犯的错误对你们中的一些人来说非常明显,但我无法找到它,所以我请求你的帮助。 我的代码的意思是打开包含12.000.000双数的.dat文件并将其存储在cuDoubleComplex数组中,该数组的大小为6.000.000个变量(.dat的偶数变量代表实部和奇数变量虚数(我的意思是顺序,而不是变量的值))
以下是我的代码摘录:
#include "cuComplex.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main(void)
{
int n = 12000000; //12.000.000
int lse = n / 2;
double *data = (double *)malloc(12000000 * sizeof(double));
double *data2 = (double *)malloc(12000000 * sizeof(double));
FILE *f, *f2;
cuDoubleComplex *se, *se2;
f = fopen("ref_PRI20.dat", "r");
fread(data, sizeof(double), n, f);
fclose(f);
f2 = fopen("surv_PRI20.dat", "r");
fread(data2, sizeof(double), n, f2);
fclose(f2);
for (int a = 0; a < n; a++)
{
printf("%f\n", data2[a]);
}
se = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
se2 = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
for (int a = 0; a<n / 2; a++)
{
se[a].x = data[2 * a];
se[a].y = data[2 * a + 1];
se2[a].x = data2[2 * a];
se2[a].y = data2[2 * a + 1];
}
free(data);
free(data2);
}
我添加了printf行和bucle只是为了检查,我得到的是&#34; 0,0000&#34;作为一种价值。虽然当我继续使用程序时,se和se2数组似乎得到随机值。 我知道数组的大小很大,但我需要使用这些数据。
我也试过在matlab工作,我没有错误。这是我在matlab中使用的代码,一切都很好所以我想.dat文件没有问题,只有我的代码。
f = fopen ("ref_PRI20.dat", 'r');
Data = fread (f, 12e6, 'double');
fclose (f);
dat=(Data(1:2:end)+1i*Data(2:2:end)).';
这里扫描输入数据,以便您可以看到格式。我希望它会有所帮助。
任何帮助将不胜感激。
答案 0 :(得分:1)
没有错误检查malloc或fopen的原始代码
由于评论说文件是在文本阅读器中打开的,并且在值之间有逗号,因此应该使用fscanf来输入值而不是fread。
由于必须一次扫描一个值,因此不需要数据或数据2指针。
无法编译,因为我没有cuComplex.h
greetingForm(Model model)
答案 1 :(得分:0)
以下提议的代码:
malloc()
现在建议的代码:
#include <stdio.h> // fopen(), fread(), printf(), fprintf(), perror()
#include <stdlib.h> // exit(), EXIT_FAILURE, malloc(), free()
#define N 12000000
struct cuDoubleComplex
{
double x;
double y;
};
int main(void)
{
struct cuDoubleComplex *data = malloc( (N>>1) * sizeof(double));
if( !data )
{
perror( "malloc failed" );
exit( EXIT_FAILURE );
}
struct cuDoubleComplex *data2 = malloc( (N>>1) * sizeof(double));
if( !data2 )
{
perror( "malloc failed" );
exit( EXIT_FAILURE );
}
FILE *f = fopen("ref_PRI20.dat", "rb");
if( !f )
{
perror( "fopen failed" );
free( data );
free( data2 );
exit( EXIT_FAILURE );
}
size_t nmemb = fread(data, sizeof(double), N, f);
if( nmemb != N )
{
fprintf( stderr, "read of first file only read %lu doubles\n", nmemb );
free( data );
free( data2 );
fclose( f );
exit( EXIT_FAILURE );
}
fclose(f);
FILE *f2 = fopen("surv_PRI20.dat", "rb");
if( !f2 )
{
perror( "fopen failed" );
free( data );
free( data2 );
exit( EXIT_FAILURE );
}
size_t nmemb2 = fread(data2, sizeof(double), N, f2);
if( nmemb2 != N )
{
fprintf( stderr, "read of second file only read %lu doubles\n", nmemb2 );
free( data );
free( data2 );
fclose( f2 );
exit( EXIT_FAILURE );
}
fclose(f2);
for (int a = 0; a < N; a++)
{
printf("%f\n", data2[a].y);
}
free(data);
free(data2);
} // end function: main