mpicc和矩阵

时间:2012-12-06 07:42:44

标签: c mpi

我有一个代码

distance = (double**)malloc(city_count*sizeof(double*));
for(i=0; i<city_count; i++) 
{
distance[i] = (double*)malloc(city_count*sizeof(double));
}

for(i=0; i<city_count; i++)
{
  for(j=0; j<city_count; j++) 
      {
         distance[i][j] = 1; // fscanf(fp, "%d", &tmp); distance[i][j] = tmp; EDITED

  }
}

然后我在Visual Studio中调试它工作得很好。但在真正的集群上,它总是充满了零。有人能帮助我吗?

分配到矩阵时出现问题,而不是读取文件。

1 个答案:

答案 0 :(得分:0)

  

但在真正的集群上,它总是充满了零。

for(i=0; i<city_count; i++)
{
    for(j=0; j<city_count; j++) 
    {
        fscanf(fp, "%d", &tmp);

更新

使用简化的问题陈述(感谢你),它几乎不会检查malloc返回的指针值,以确保它们不是NULL(除非city_count非常大,否则非常令人惊讶。)

旧更新

卫生署!我刚注意到%d读取与&amp; tmp类型不匹配的int。应该是:

        fscanf(fp, "%lf", &tmp);

fscanf不是类型安全的,因此这种类型的不匹配通常会导致问题。

发布事实编辑

并确保你没有犯同样错误将“%d”传递给printf。 ; - )

结束更新

确保city_count不是0

检查fscanf的返回值(以及tmp的值)。你确定这个文件读取成功吗? From the docs at cplusplus.com

  

成功时,该函数返回成功填充的参数列表的项数。由于匹配失败,读取错误或文件结束的范围,此计数可以匹配预期的项目数或更少(甚至为零)。

     

如果在读取时发生读取错误或达到文件结尾,则设置正确的指示符(feof或ferror)。并且,如果在成功读取任何数据之前发生任何一次,则返回EOF。