[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "Segmentation fault", the result is curious!



I guess that in addition to "$p0 send 3",  internally some Tcl commands having 3
arguments exist which need to be processed by the base class not PingAgent.

So, if you return all commans having 3 arguments as well as "$p0 send 3" without
pssing it to "return (Agent::command(argc, argv));", I think it maybe cause
problems.

It's just my guess.

[email protected]
http://netbeta.sogang.ac.kr/~suchduck/

Zhu Xiaogang wrote:

> Hello, all,
>   Another hardworking day has passed. At last, the problem focuses on the
> location of "return (TCL_OK);" sentence in the function "int
> ???Agent::command(...)". Here I take Ping program in Marc Greis' nstutorial
> packet as an example, I made a test to it , the result is the same as my
> program's.
>
>   When the command line follow with three parameters, "return (TCL_OK);"
> should be written in the correction location(as bellow).
>     .
>     .
>     .
>   if(argc == 3){
>     if( strcmp(argv[1], "send") == 0){
>       for(int i=0; i<atoi(argv[2]); i++){
>         Packet* pkt = allocpkt();
>         hdr_ping* hdr = (hdr_ping*)pkt->access(off_ping_);
>         hdr->ret = 0;
>         hdr->send_time = Scheduler::instance().clock();
>         send(pkt, 0);
>       }
>       return (TCL_OK); /* the correct position*/
>     }
>   }
>     .
>     .
>     .
>
>   If you move the sentence down to the next brace( as below), when
> "send(pkt, 0);" is executed, the program will quit and return the
> information "segmentation fault(core dumped)".
>     .
>     .
>     .
>   if(argc == 3){
>     if( strcmp(argv[1], "send") == 0){
>       for(int i=0; i<atoi(argv[2]); i++){
>         Packet* pkt = allocpkt();
>         hdr_ping* hdr = (hdr_ping*)pkt->access(off_ping_);
>         hdr->ret = 0;
>         hdr->send_time = Scheduler::instance().clock();
>         send(pkt, 0);
>       }
>     }
>     return (TCL_OK); /* the incorrect position*/
>   }
>     .
>     .
>     .
>
>   The corresponding command line in tcl file is "$ns at 0.5 "$p0 send 3".
> When there are two parameters in command line, the problem doesn't occur. It
> is curious to me. My system is Linux Slackware 3.4, and NS packet is
> ns-allinone-2.1b4.
>
>   If somebody know the answer to it, I would like to know too and would be
> grateful.
>
> Best thanks to Ng Kwang Loong Stanley, Wee Ching Wi and Seo, Chi-Duk who
> gave me useful advises.
>              ZXG