在从主C++返回0之后,程序在第二次运行中崩溃

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个字符分配内存