gpt4 book ai didi

c++ - 从动态分配的数组中获取内存泄漏

转载 作者:行者123 更新时间:2023-11-30 04:07:54 24 4
gpt4 key购买 nike

我正在尝试编写一个程序来反转用户输入的字符串。如果他们输入“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 中。

我的具体问题是,如果我要删除所有动态数组,内存泄漏怎么还会发生,泄漏是否会发生,因为我没有为每个数组输入正确的大小?谢谢

最佳答案

usrinput = input;
inputString = usrinput;

要复制字符串,您需要复制每个 char,而不仅仅是重新分配指针。使用 = 会丢弃动态分配的内存——这就是内存泄漏——并导致所有指针指向内存中的同一位置。这意味着 usrinputinputString 最终都指向 input,因此最后的 delete[] 调用失败,因为 input 没有分配给 new

strcpy(userinput, input);
strcpy(inputString, usrinput);

关于c++ - 从动态分配的数组中获取内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com