by 彦左衛門 » 2005年11月30日(水) 16:45
皆さん今日は。
バグ報告の方にすべきなのかも知れませんが、
今回は、ByVal に関して伺いたいと思います。
以下のようなプログラムが在るとします。
----- ここから -----
Dim TestBP As BytePtr
Dim Ret As BytePtr
TestBP = calloc(64) ' いい加減
lstrcpy(TestBP, "ActivBasicByValFunction_Test")
Ret = Check_A(TestBP)
free(TestBP)
Debug ' No.2 ← ← ←
End
Function Check_A(ByVal FunTestBP As BytePtr) As BytePtr
FunTestBP[10] = 0
Debug ' No.1 ← ← ←
Check_A = FunTestBP
End Function
----- ここまで -----
プロシージャ Check_A に、ActivBasicByValFunction_Test と言う文字列を保持するグローバル変数 TestBP という BytePtr 型変数を値参照し、ActivBasicByValFunction_Test と言う文字列を ActivBasic という文字列にして戻すと言うものですが、No.1 の所でデバッグし、確認すると、ローカル変数 FunTestBP(グローバル変数 Ret) だけで無く、グローバル変数 TestBP の値も ActivBasic という文字列に成ってしまいます。ByVal を指定したので、TestBP は最後まで ActivBasicByValFunction_Test と言う文字列を保持すべきだと思っているのですが、如何なものでしょうか。また、No.2 の所では、TestBP と共に Ret も解放されるようです。プログラミングの仕方、考え方の部分で誤りが在るのかも知れませんが、その辺りを含め、宜しくお願いします。尚、この事象は Ver3.13、Ver4.11.03 共で起こります。
皆さん今日は。
バグ報告の方にすべきなのかも知れませんが、
今回は、ByVal に関して伺いたいと思います。
以下のようなプログラムが在るとします。
----- ここから -----
Dim TestBP As BytePtr
Dim Ret As BytePtr
TestBP = calloc(64) ' いい加減
lstrcpy(TestBP, "ActivBasicByValFunction_Test")
Ret = Check_A(TestBP)
free(TestBP)
Debug ' No.2 ← ← ←
End
Function Check_A(ByVal FunTestBP As BytePtr) As BytePtr
FunTestBP[10] = 0
Debug ' No.1 ← ← ←
Check_A = FunTestBP
End Function
----- ここまで -----
プロシージャ Check_A に、ActivBasicByValFunction_Test と言う文字列を保持するグローバル変数 TestBP という BytePtr 型変数を値参照し、ActivBasicByValFunction_Test と言う文字列を ActivBasic という文字列にして戻すと言うものですが、No.1 の所でデバッグし、確認すると、ローカル変数 FunTestBP(グローバル変数 Ret) だけで無く、グローバル変数 TestBP の値も ActivBasic という文字列に成ってしまいます。ByVal を指定したので、TestBP は最後まで ActivBasicByValFunction_Test と言う文字列を保持すべきだと思っているのですが、如何なものでしょうか。また、No.2 の所では、TestBP と共に Ret も解放されるようです。プログラミングの仕方、考え方の部分で誤りが在るのかも知れませんが、その辺りを含め、宜しくお願いします。尚、この事象は Ver3.13、Ver4.11.03 共で起こります。