从函数中删除动态大小的数组

Deleting dynamically sized array from function

本文关键字:数组 动态 函数 删除      更新时间:2023-10-16

在我的代码的这一部分(接收时间(中,我有一个动态大小的字符数组。这适用于学校项目,需要动态大小的数组。

char* msgtime::getTime() {
    std::string t;
    t.append(std::to_string(hour));
    t.append(":");
    t.append(std::to_string(minute));
    char *charTime = new char[t.length()];
    strcpy(charTime, t.c_str());
    return charTime;
}

但是,我无法删除字符时间,因为我正在返回值。我尝试按照我在这里看到的另一个问题将其返回到主程序中的 char* 中,然后在完成后将其删除。下面的代码是函数返回的内容:

void receive(packet &data, SOCKET con) {
    msgtime tim;
    cout << "Receiving data" << endl;
    int in = recv(con, (char*)&data, sizeof(data), 0);
    cout << "Data received: " << in << endl;
    tim.updateTime();
    char *newTime = tim.getTime();
    strcpy(data.time, newTime);
    delete[] newTime;
}

除非我运行它时出现此错误:

检测到堆损坏:在0x00129330的正常块 (#183( 之后CRT 检测到应用程序在堆缓冲区结束后写入内存。

我需要删除 getTime 函数中的 charTime 来堵塞内存泄漏,但我不知道该怎么做。任何帮助将不胜感激!

您没有分配足够的空间,还需要一个字符来存储空终止符:

char *charTime = new char[t.length() + 1];