【发布时间】:2012-09-24 00:42:05
【问题描述】:
我是 cpp 新手,对数组有疑问。我在下面的代码应该创建一个反向版本的 str 并将其存储在 newStr 中。但是, newStr 总是空的。有人可以向我解释为什么会发生这种情况,即使我从 str 中分配了一个值?
void reverse (char* str) {
char* newStr = (char*)malloc(sizeof(str));
for (int i=0;i<sizeof(str)/sizeof(char);i++) {
int index = sizeof(str)/sizeof(char)-1-i;
newStr [i] = str [index];
}
}
PS:我知道通过移动指针或使用 std::reverse 函数来反转数组效率更高,但我对上述代码为什么不起作用感兴趣。
【问题讨论】:
-
很多骗子,但
sizeof(char*)不是数组的大小。你也应该使用std::string,或者,如果你别无选择,至少new/new[]和delete/delete[]超过malloc和free。 -
不要在 C++ 中使用 malloc,使用 new。
-
与
unique_ptr无关 -
@Aesthete 是的,他在函数中分配内存并希望调用者知道释放返回的指针。你需要
unique_ptr来解决这种情况。 -
您不需要
unique_ptr来解决这个问题,您需要更好的设计和良好的内存管理工作知识。在人们理解抽象的内容之前,不要向他们扔抽象。