Ofe*_*.T. 1 c++ string visual-studio-2015
我已经构建了自己的strlen和strdup函数.当我第一次使用我的strdup它没关系时,我关闭窗口,再次运行它,然后在程序结束后从主程序返回0程序崩溃.VS只是说它触发了一个断点.
#include "stdafx.h"
#include <iostream>
using namespace std;
int MyStrlen(const char* str);
char* MyStrdup(const char* str);
int main()
{
char *s1 = "Hello World!";
char *s2 = MyStrdup(s1);
cout << s1 << " , " << s2 << endl;
system("pause");
return 0;
}
int MyStrlen(const char* str)
{
register int iLength = 0;
while (str[iLength] != NULL)
{
iLength++;
}
return iLength;
}
char* MyStrdup(const char* str)
{
char* newStr;
int strLength = MyStrlen(str);
newStr = new char(strLength+1);
for (register int i = 0; i < strLength; i++)
{
newStr[i] = str[i];
}
newStr[strLength] = NULL;
return newStr;
}
Run Code Online (Sandbox Code Playgroud)
有人可以注意到它崩溃的地方吗?我认为这可能是内存泄漏.另外,您能否注意到代码中需要改进的内容?为了我的学习目的
编辑:谢谢,我不知道为什么我使用()而不是[]来定义我的新char [].毕竟这是内存泄漏或覆盖.
Adi*_*vin 11
数组的"new"语句应使用方括号:
newStr = new char[strLength+1];
Run Code Online (Sandbox Code Playgroud)
当你这样做
new char(c)
Run Code Online (Sandbox Code Playgroud)
它分配一个字符并将字符c复制到其中.当你这样做
new char[n]
Run Code Online (Sandbox Code Playgroud)
它为n个字符分配内存