2011-11-10 11 views
3

、長い間、実際に私はほぼポジティブです。私はこのようなコードの一部をコンパイルしていますが、彼らは働いていますが、最近失敗しました。デバッガで確認された値とは、それが切り捨てられているも、それは明らかに正しく働いてきたいくつかの簡単なコードは、私が取り組んできたSDKに失敗し始めている

例:

void SomeFunction(CString& paramstring) //let's pretend we pass a string with the value "hello" 
{ 
    int size=paramstring.GetLength(); //size now contains an incorrect shorter value like 4 
    CString localstring=paramstring;//localstring contains something like "hell" or "hel" 
} 

これは

+0

ヒント:コードを貼り付けるときは、すべてをハイライトし、 '{}'ボタンを押して適切にフォーマットします。 –

+7

この短いサンプルで開示していない情報がある必要があります。なぜなら、それが失敗する理由は全くないからです。 –

+0

CStringで何をやっていますか?あなたはそれを何とか修正していますか?それを関数に渡す前に、どのように見えるのですか? – FailedDev

答えて

2

IVEに起きている可能性がある理由を任意のアイデアは、コンソールアプリケーションで、あなたのコードを試してみましたが、それは問題があなたのコードの別の部分から来て完璧に動作します

:ここにコードが出力

#include <iostream> 
#include <afx.h> 
using namespace std; 

//let's pretend we pass a string with the value "hello" 
void fun(CString& paramstring) 
{ 
    int size=paramstring.GetLength(); 
    cout<<"size= "<<size<<"\n"; 
    CString localstring=paramstring; 
    wcout<<"string = "<<(LPCTSTR)localstring<<"\n"; 
} 

int main() 
{ 
    CString s ("Hello"); 
    fun(s); 
} 

(使用MFCを)それを試してみます= 5弦

サイズ=こんにちは

1

私の唯一の推測では、あなたがそのオブジェクトを破壊メモリの上書きを持っています。

電動工具を持ち出す時間。 PurifyまたはBoundscheckerをインストールし、バグを捜索してください。

+0

ありがとうございます。残念ながら、私はソースコードのその部分にアクセスできません。私はプラグインsdkを使用しています。これは上書きする関数です。 – nsfnotthrowingaway

0

私は、パラメータとして渡されたときに正しく動作CStringsを停止し、過去のCStringのコードでミスを犯してきました。あなたの問題はまったく違うかもしれませんが、私が問題を引き起こすために何をしたのか、ここでは誰かを助けるかもしれないので説明します。

私のCStringにはディレクトリ名が含まれていました。ちょっと整理するために、最後の文字が '\'であるかどうかを確認し、そうであればCStringの中の文字を直接上書きすることで '\ 0'に置き換えました。おそらく何らかの形で(strlenのようなものによって測定された)文字列の長さの間のミスマッチを作成することで、CStringのの整合性を破壊し

、およびバッファの実際のサイズ。問題の私の説明は正しくないかもしれませんが、それは基本的に私にはCStringの完全性を損なう煮詰まったと思います。

私の問題は、 のように置き換えて解決しました。dirname = dirname.Left(dirname.GetLength() - 1);

私はメモリからこれを書いていると私は、関数名のincorrecltyを覚えている場合が多いの機能を使用するので、私を許していません。とにかく、私の推奨は、CStringの途中にヌル文字を書いて短くし、CStringをパラメータとして問題が発生した場合にそれを探すことです。

はいああ、私はこの問題は、あなたの逆かもしれないと思います。文字を上書きして文字列を短くすると、おそらくGetLength()は古い値を返します。これは、予想よりも大きくなります。

私の実際の問題は、DIR +「\」+ファイル名が働いていなかったということでした。私はそれがヌルを含む文字列を連結していたと仮定し、最後の値はヌルが追加された場所であるので、ディレクトリ部分だけでした。