编辑:我认为问题是由于 nvcc 调用 C++ 编译器而不是 C 编译器,因为当我不将 malloc(3) 调用转换为 char* 时收到错误。我通过以下方式得出这个断言:从 void* 到 char** 的无效转换
编辑编辑:如果我使用 fileO = fopen(version, "w"); 效果很好 绕过 strcpy 和 strcat 调用。(哈哈,我说的是猫叫声……)
所以我有一个 CUDA 程序,我从同一程序的顺序版本(非 CUDA)中收集了一些文件 I/O。完全相同的代码适用于常规 gcc 编译,但不适用于 nvcc。我知道 nvcc 将 C/C++ 分流到本机 C++ 编译器,但由于某种原因,它只是没有打开可写文件。我已经打开和关闭了另一个文件流,用于在上面的代码中读取数据,但我在我的顺序版本中这样做,它在那里工作正常。
以下是相关代码:
else
{
char* version = "matrixExpCUDAx";
char* filename = (char *)malloc(strlen(version) + strlen(argv[3]));
strcpy(filename, version);
strcat(filename, argv[3]);
FILE *fileO;
fileO = fopen(filename, "w");
if(DEBUG)
{
for (i=0; i<(dim*dim); i++) fprintf(stderr, "%f\n", h_O[i]);
}
else
{
if(fileO != NULL)
{
for (i=0; i<(dim*dim); i++)
{
fprintf(fileO, "%f\n", h_O[i]);
}
fclose(fileO);
}
else fprintf(stderr, "Write file failed to create\n");
}
}
....
我每次都收到“写入文件创建失败”。
有任何想法吗?