我有一个代码
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中调试它工作得很好。但在真正的集群上,它总是充满了零。有人能帮助我吗?
分配到矩阵时出现问题,而不是读取文件。
答案 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。