0

我有一个代码

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 中调试它,它工作得很好。但在真正的集群上,它总是充满零。有谁能够帮助我?

分配给矩阵的问题,而不是读取文件的问题。

4

1 回答 1

0

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

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

更新

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

旧更新

嗬!我刚注意到。%d 读取一个与 &tmp 类型不匹配的 int。应该:

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

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

事后编辑

并确保您没有犯同样的错误,将“%d”传递给printf. ;-)

结束更新

确保city_count不是0

Checkfscanf的返回值(和 tmp 的值)。你确定这个文件读取成功了吗?来自 cplusplus.com 上的文档

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

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

于 2012-12-06T07:46:20.247 回答