【发布时间】:2014-03-03 20:16:32
【问题描述】:
我正在尝试编写一个反转用户输入字符串的程序。如果他们输入“book”,它应该返回“koob”。我必须调用函数 reverseit(char *inputString, char *outputString) 并在其中编写我的算法。
一切正常,但最后返回 malloc 错误
:malloc: *** error for object 0x7fff5c8a5bc0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
我写的代码:
void reverseit(char *inputString, char* outputString);
int main()
{
char input[100];
cin.getline(input, 10);
int lenn = strlen(input);
char* usrinput = new char[lenn+1];
usrinput = input;
int len = strlen(usrinput);
char* inputString = new char[len+1];
inputString = usrinput;
char* outputString = new char[len+1];
reverseit(inputString, outputString);
for (int o = 0; o < len; o++)
{
cout << outputString[o];
}
cout << endl;
delete [] usrinput;
delete [] inputString;
delete [] outputString;
return 0;
}
void reverseit(char *inputString, char *outputString)
{
size_t length = strlen(inputString);
char temp;
int k = 0;
for(int i = length - 1; i >= 0 ; i--)
{
temp = inputString[i];
outputString[k] = temp;
k++;
}
}
有几个限制确实使这比实际上更困难,因为除了两个 char 指针之外,我不允许将任何其他变量调用到 reverseit 中。
我的具体问题是,如果我要删除所有动态数组,内存泄漏如何仍然发生,是否会发生泄漏,因为我没有为每个数组输入正确的大小?谢谢
【问题讨论】:
-
你正在删除你不应该删除的东西,并且没有删除你应该删除的东西。尝试按照您删除的
char*指向的内容。 -
因为您遇到了 malloc 错误,我假设您在 C 库的某些部分做错了什么。我还没有完全阅读你的代码,但是 strlen 依赖于被 \0 终止的字符串,所以我将输入数组定义为 char input[100] = { };否则,数组的内容是未定义的,并且可能暂时不包含 \0。这只是一个猜测(因此不是答案)。
-
@Marckvdv 以这种方式初始化数组是一个很好的技巧,但您似乎真的没有阅读太多代码,他在下一行代码中使用
getline总是添加一个结尾的分隔符。 -
@Excelsius 啊我不知道,除非必须,否则我不会真正在 C++ 中使用 C 风格的东西。
-
@Marckvdv 是的,这看起来很像家庭作业,否则我会说那些讨厌的
char数组和你好string:)
标签: c++ arrays memory dynamic-arrays