【发布时间】:2026-02-22 14:05:01
【问题描述】:
如标题所述,该程序在我的本地机器(ubuntu 9.10)上运行,但在服务器(linux)上运行。这是godaddy的网格托管包。
请帮忙..
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long offset;
FILE *io;
unsigned char found;
unsigned long loc;
if (argc != 2)
{
printf("syntax: find 0000000\n");
return 255;
}
offset = atol(argv[1]) * (sizeof(unsigned char)+sizeof(unsigned long));
io = fopen("index.dat","rb");
fseek(io,offset,SEEK_SET);
fread(&found,sizeof(unsigned char),1,io);
fread(&loc,sizeof(unsigned long),1,io);
if (found == 1)
printf("%d\n",loc);
else
printf("-1\n");
fclose(io);
return 0;
}
编辑:这不是我的程序。 我希望我知道足够的 C 来修复它,但我已经到了最后期限。该程序旨在查找 PI 序列中第一次出现的 7 位数字,index.dat 包含一个巨大的数组编号 => 位置。
http://jclement.ca/fun/pi/search.cgi
编辑 2:我使用更新后的代码测试空指针,仍然得到相同的结果。 该程序在我的本地机器上运行良好,这个错误只发生在服务器上。
【问题讨论】:
-
故障信息是什么?哪条线失败了?
-
可能文件不存在,所以
fopen返回NULL? -
你为什么要将参数乘以 (sizeof(long)+sizeof(char)) 来给你偏移量?...如果调用 fopen,这会让你超过文件末尾工作 - 你真的首先验证过......如果参数是 1234567 怎么办????哦,是的,在继续之前先打开文件时检查 NULL....
-
您在下面的 cmets 中提到的另一件事...您将其上传到服务器,服务器上的文件名也可能区分大小写? Index.DAT 对 index.dat 区分大小写....先检查....
-
文件名和代码中的一模一样。
标签: c segmentation-fault