3

私は valgrind を満足させ、素晴らしい実装を考え出そうとしていますが、問題が発生しています。基本的に、私がやろうとしているのは、配列内の 2 つの文字列を 1 つに減らすことです。arr含むとしましょう

{ "One", "Two", "Three" }

また、各文字列のメモリ割り当てが適切に行われていること (a laarr[1] = malloc(strlen("one") + 1)およびstrcpy(arr[1], "One").

私はいくつかの文字列操作を行い、やろうとします:

strcpy(arr[1],"OneTwo");

arr[2] を削除しますが、arr[1] のメモリ割り当てが変更されているため、これは本質的に問題があります。malloc をもう一度実行するのは悪いことだと何かが教えてくれます。

できますreallocが、それには arr[2] を解放し、その後のすべてを 1 スペース下に移動して再割り当てする必要があります。私もできますarr[2] = NULLが、valgrindは同意しません。

どんなヒントでも大歓迎です。

4

2 に答える 2

4

再割り当てして文字列の末尾にarr[1]追加してから解放します(後で混乱を避けるために arr[2] = NULL を設定します)。arr[2]arr[2]

于 2011-04-10T01:30:30.943 に答える
2

なぜreallocingarr[1]は他の何かを変更する必要があるのでしょうか?

strcpy( arr[1] = realloc( arr[1], sizeof "OneTwo" ), "OneTwo" );
free( arr[2] );
arr[2] = NULL;

は、私にはよく見えますよ。この後は何もないarr[2]ので、シフトする必要はありません。ある場合は、はい、配列の途中から削除すると、次の要素を下にシフトする必要があります。

于 2011-04-10T01:29:09.250 に答える