选择CL平台后读取文件时出现Seg故障

选择CL平台后读取文件时出现Seg故障,c,file-io,opencl,C,File Io,Opencl,我是OpenCL的新手。我试图从文件中读取数据,并用OpenCL中的数据进行一些计算。但是,当我添加代码来选择其中的平台时,read函数不再工作。它以前工作过 还有一点信息:输入文件格式只是一个浮动列表,每行一个数字。 下面是我添加的一段代码: clu-uint-numPlatforms; INTERR; err=clGetPlatformIDs0、NULL和numPlatforms; 如果出错!=CL|u SUCCESS | | numPlatforms我的观察表明,这些都是可能的问题 me

我是OpenCL的新手。我试图从文件中读取数据,并用OpenCL中的数据进行一些计算。但是,当我添加代码来选择其中的平台时,read函数不再工作。它以前工作过

还有一点信息:输入文件格式只是一个浮动列表,每行一个数字。 下面是我添加的一段代码:

clu-uint-numPlatforms; INTERR; err=clGetPlatformIDs0、NULL和numPlatforms;
如果出错!=CL|u SUCCESS | | numPlatforms我的观察表明,这些都是可能的问题

memcpy(tempCopy,tempIn, size * sizeof(float));
此处未分配tempCopy的内存。您需要为它分配第一个内存

在read函数中有行

if((fp = fopen(file,"r"))==0) printf("Could not open file to read\n");
在这里,若文件打开失败,那个么仍然要读取文件。fopen失败时需要return语句。任何操作失败时请注意break/return。无法进行进一步处理。您可以在代码中查看许多条件检查,如果失败,您只需显示消息,不采取任何操作中断/返回并进入进一步处理。首先更正此项

在for循环中,您还有以下几行

     fgets(str, STR_SIZE, fp);
      if(feof(fp)) fatal("not enough lines\n");
在这里,您首先读取文件,然后检查它是否为空。这是错误的方法。首先检查文件是否为空。如果为空,则断开循环,否则读取。像

    if(!feof(fp))
    {
      fgets(str, STR_SIZE, fp);
    }
    else
    {
       fatal("not enough lines\n");
       break;
    }
读和写也是unix系统调用。这将导致冲突。因此最好更改用户定义函数的名称。

读和写是unix类型操作系统(如Linux)上的系统调用。尝试将函数重命名为其他函数。