2009-05-28 21 views
0

Objective-Cライブラリをクロスプラットフォームにするために、Cライブラリに変換しました。しかし、私はこのことを処理するために送付するまで、すべてが大丈夫だと思われます。Malloc'ed文字列にガベージ値が含まれています

エラーが発生した時点です。

いくつかの改訂を振り返ってみると、私はデバッガで何か気づいた。

右そうのようなmallocされた文字列の後:

char *theString = malloc(SOME_SIZE * sizeof(char)); 

私はtheStringはX03を\と*さtheStringは "3 '\ 003'" であることがわかります。

私はstrcatや何かを与えていないので、これは単なる奇妙な記憶だと思っていましたが、その奇妙な開始キャラクタが持ち越して、同様のmallocを実行するたびに繰り返します。

通常の処理の点では問題ありません。残念ながら、私はそれが何であるか分からない、そうでなければ、私はちょうどその最初のキャラクターか何かを切り捨てるような劇的な何かをするだろう。

NSStringを安全に変換したいと思ったら、それはどういうものなのですか?

答えて

9

mallocから返される値は、特定の値に設定されているとは限りません。指定した長さ以上のメモリを指すことが保証されています。あなたが何らかの価値を創造するためには、自分でそれを行う必要があります。あるいは、交互にメモリをゼロにするcallocを使います。

+1

callocは、必要な場合以外は使用しないでください(構造体や配列など)。 –

+1

これについて詳しく説明できますか?私は、単一の要素へのポインタがcallocを使用してはならないことを意味しています(組込み型の場合と同じです)。 – Sam

+0

ゼロ調整は潜在的に高価です。また、以前はcalloc()を使用していて、malloc()の後にbzero()を使用するように切り替えることですべてが解決されました。 –

関連する問題