3

我试图满足 valgrind 并提出一个很好的实现,但我遇到了一个障碍。本质上,我要做的是将数组中的两个字符串减少为一个。假设arr包含

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

并且每个字符串的内存分配已按应有的方式完成(laarr[1] = malloc(strlen("one") + 1)strcpy(arr[1], "One").

我做了一些字符串操作并尝试做:

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

并删除 arr[2] 但这本质上是有问题的,因为 arr[1] 的内存分配已经改变。有些事情告诉我,再次做 malloc 会很糟糕。

我可以这样做realloc,但这需要释放 arr[2] 并将其后的所有内容向下移动一个空格并重新分配。我也可以,arr[2] = NULL但 valgrind 不同意。

任何提示将不胜感激。

4

2 回答 2

4

重新分配arr[1]并附arr[2]加到字符串的末尾,然后释放arr[2](并设置 arr[2] = NULL 以避免以后混淆)。

于 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 回答