2011-10-13 11 views
0

現在、次のコードがあります。構造体内のC文字列のMallocメモリ

この時点で私のコードは構造体qnode内でmalloc空間にしようとすると失敗します。

strlenが実際に正しいポインタで動作していることを確認しました。実際には、サイズの長さを返しています。何らかの理由で、私はこの時点でセグメンテーション違反を取得しましたが、理由を理解できません。

はF.y.iしかし、これはmalloc関数のこのシンプルなラインは、具体的に割り当てられなかったどちらもC言語を使用していたものではありません割り当ての一部です。私は割り当てにC++をすることが許されていますが、私はC言語をもっと知識を得るために選択しました。ヘルプ

ありがとう!

+1

の一部ではないことに注意してくださいだろうか?第2の 'malloc'によって返されたポインタをなぜ破棄していますか? – Mat

答えて

3

あなたは十分なメモリを割り当てていません。あなたはゼロ終端装置のためのスペースを残す必要があります。また、文字列の内容をコピーし、ポインタを文字列に割り当てないでください。これらの両方のエラーは、ヒープの破損につながり、エラーを説明します。コードは次のようにする必要があります:

cur->path = malloc(strlen(*path)+1); 
printf("Malloc path success"); 
strcpy(cur->path, *path); 

もちろん、あなたのシステムは、それが利用可能である場合strdupを使用しますが、それは標準C. `PATH`のタイプは何ですか

+0

助けてくれてありがとう。私はstrcpyの部分を見逃していたが、それを入れ替えて忘れることを忘れた。私の間違いは実際にはもっと簡単な間違いでしたが、私が気にしているのは、メッセージが実際に適切なタイミングで出力されるように出力バッファをフラッシュするのを忘れてしまったためです。しかし、助けてくれてありがとう!私はstrdupを知らなかったし、私はちょうど物事を少し簡単に私のシステム上にあることを確認した。また、strlen(* path)によって返される値は実際には '\ 0'を含む実際のサイズです。 – Ben

+2

ベン、調査を調査する必要があります。 strlenは終端の '\ 0'を数えるべきではありません。 –

+0

@Ben Nigelは正しいです。 'strlen'は' \ 0'文字を数えません。あなたは間違っている必要があります。 –