我正在使用bash脚本在ns2中为各种种子生成移动文件(setdest)。但我遇到了这个麻烦的分段错误。任何帮助,将不胜感激。 setdest.cc已被修改,因此它不是标准的ns2文件。
我将引导您解决问题。
shell脚本中的此代码返回分段错误。
#! /bin/sh
setdest="/root/ns-allinone-2.1b9a/ns-2.1b9a/indep-utils/cmu-scen-gen/setdest/setdest_mesh_seed_mod"
let nn="70" #Number of nodes in the simulation
let time="900" #Simulation time
let x="1000" #Horizontal dimensions
let y="1000" #Vertical dimensions
for speed in 5
do
for pause in 10
do
for seed in 1 5
do
echo -e "\n"
echo Seed = $seed Speed = $speed Pause Time = $pause
chmod 700 $setdest
setdest -n $nn -p $pause -s $speed -t $time -x $x -y $y -l 1 -m 50 > scen-mesh-n$nn-seed$seed-p$pause-s$speed-t$time-x$x-y$y
done
done
done
错误是
scengen_mesh: line 21: 14144 Segmentation fault $setdest -n $nn -p $pause -s $speed -t $time -x $x -y $y -l 1 -m 50 >scen-mesh-n$nn-seed$seed-p$pause-s$speed-t$time-x$x-y$y
第21行是shell脚本的最后一行(完成)
奇怪的是如果我在终端上运行相同的setdest命令,没有问题!喜欢 $ setdest -n 70 -p 10 -s 5 -t 900 -x 1000 -y 1000 -l 1 -m 50
我已经确定了问题的确切位置。它与参数-l。如果我删除shell脚本中的参数,则没有问题。现在,我将引导您完成此参数的修改后的setdest.cc。
此修改后的setdest文件使用文本文件initpos来读取无线网状拓扑的静态节点的XY坐标。相关的代码行是
FILE *fp_loc;
int locinit;
fp_loc = fopen("initpos","r");
while ((ch = getopt(argc, argv, "r:m:l:n:p:s:t:x:y:i:o")) != EOF) {
switch (ch) {
case 'l':
locinit = atoi(optarg);
break;
default:
usage(argv);
exit(1);
if(locinit)
fscanf(fp_loc,"%lf %lf",&position.X, &position.Y);
if (position.X == -1 && position.Y == -1){
position.X = uniform() * MAXX;
position.Y = uniform() * MAXY;
}
我没有得到的是...... 在Shell脚本.. -option -l如果由0提供则不返回错误, - 但如果由任何其他值(我主要使用1)提供,则返回此分段错误。 在终端.. - 没有任何值的分段错误。 0或1
肯定与shell脚本有关。我很惊讶在哪里出了问题!
我们将非常感谢您的帮助。 干杯