Sadless is a good man, but you can not see it through.

2008年7月25日 星期五

TDMA ~ terminate called after throwing an instance of 'std::bad_alloc

When I run TDMA MAC, the memory usage is always increasing with time.

In the end, it will occur this

"terminate called after throwing an instance of 'std::bad_alloc"

Someone meet this issue either.



After Panos debugged it, this is the way to solve it.

original:
free(pkt);

after:
Packet::free(pkt);



2008年7月23日 星期三

proc

proc 裡面要用到前面的 array 時

要 global array
不要只 global array(0)

ex:

proc record {} {
global node_
set x [$node_(1) set Y_]
set panos_record [open panos.rec a]
puts $panos_record $x
close $panos_record
}




Tcl語法

常用的Tcl語法記錄與此,以後好備查:

1.宣告變數:
set A 100

2.列印變數的值:
puts $A

3.Append變數:
set a {QA Engineer: }
set b {Lawrence Chiu}
puts $a
puts $b
append a $b
puts $a

4.Array:
#Set value to array
for {set i 5} {$i >= 0} {incr i -1} {
set myarray($i) $i
}
#Print array value
for {set i 0} {$i <= 5} {incr i +1} { puts "myarray($i)=$myarray($i)" }

5.將指令結果存於變數內:
set var [exec ifconfig]
puts $var
set var2 [exec ifconfig | grep "inet\ addr" | grep -v 127.0.0.1]
puts $var2

6.eval & subst:
set age 28
set str {I'm $age years old}
set cmd {puts "$str"}
eval $cmd
eval [subst $cmd]

7.foreach:
set SUM 0
foreach test {1 2 3 4 5} {
puts "$test"
set SUM [expr $SUM + $test]
}
puts "SUM=$SUM"

8.if:
set A 100
if {$A==101} {
puts "A=101"
} else { puts "A=100" }

9.開關檔:
set ls [exec ls]
set file [open file w]
puts $file $ls
close $file

10.positional應用:
set count [llength $argv]
puts $count
for { set i 0 } { $i <= [expr $count-1] } { incr i +1} { puts [lindex $argv $i] } 11.positional應用, foreach:
foreach a $argv {
puts $a
}

11.proc:
#functin f1
proc f1 {a b} {
return [expr $a + $b]
}

#Main program
set A 100
set B 150

set sum [f1 $A $B]
puts "A=$A"
puts "B=$B"
puts "A+B=$sum"

12. RE:
set var1 {abcde}
set var2 {b1234}
set var3 {aabcd}

puts "var1=$var1"
puts "var2=$var2"
puts "var3=$var3"
puts "\r"

puts "Which variable have a character?"
if {[regexp {a} $var1]} {
puts "var1 have a character"
} else { puts "var1 haven't a character" }

if {[regexp {a} $var2]} {
puts "var2 have a character"
} else { puts "var2 haven't a character" }

if {[regexp {a} $var3]} {
puts "var3 have a character"
} else { puts "var3 haven't a character" }
puts "\r"
puts "Which variable include number?"

if {[regexp {[0-9]} $var1]} {
puts "var1 have number"
} else { puts "var1 haven't a number" }

if {[regexp {[0-9]} $var2]} {
puts "var2 have number"
} else { puts "var2 haven't number" }

if {[regexp {[0-9]} $var3]} {
puts "var3 have number"
} else { puts "var3 haven't number" }

13.string:
set A "hello world!"
puts $A
puts [string length $A]
puts [string index $A 4]
puts [string range $A 6 9]
puts [string range $A 6 end]
puts [string toupper $A]
puts [string tolower $A]

14.switch:
set A yes
switch $A {
yes { puts "yes"}
no { puts "no" }
YES { puts "YES" }
default { puts "Not match!" }
}

15.while
set SUM 0
set i 1
while { $i <= 100} {
set SUM [expr $SUM + $i]
incr i 1
}
puts "SUM=$SUM"

Tcl online man page: http://www.tcl.tk/man/



2008年7月4日 星期五

找到下齒尖

唱歌的時候把共振的位置放在下門牙尖, 可以有穩定的聲音


C++:動態配置陣列 ~(感謝 牛皮線條筆記 分享)

ref: http://tw.myblog.yahoo.com/pp-tea/article?mid=22


【一維陣列】

在C++中,配置與釋放一般陣列的語法如下:

//配置
int *test = new int[5];
//釋放
delete [] test;





【多維陣列】

由於動態配置的資料型態必須是一維的,所以若要配置多維陣列時,則需要用以下方法來進行配置。

EX:要宣告一個 int test[3][4][5] 的陣列。

int ***test;
test = new int**[3];
//配置
for(int i=0; i<3; i++)
{
test[i] = new int*[4];
for(int j=0; j<4; j++)
{
test[i][j] = new int[5];
}
}

//釋放
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
delete [] test[i][j];
}
delete [] test[i];
}
delete [] test;



簡單說,要動態配置多維陣列,就必須先由第一維開始,配置存放下一維陣列之指標的指標陣列,然後再各自往下配置,以此類推,到了最後一維則直接配置。刪除的方法類似,反向操作即可。