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

标签 c++ return-value dynamic-allocation

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

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;
}

但是,我无法删除 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 处的正常 block (#183) 之后 CRT 检测到应用程序在堆缓冲区结束后写入内存。

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

最佳答案

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

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

关于c++ - 从函数中删除动态大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44598045/

相关文章:

c++ - VB脚本与COM接口(interface)继承相关的查询

c++ - 使用 union hack c++ 进行事件处理

c++ - 重写 QDataStream 运算符 >> () 等同于没有 Qt 的 C++

ruby - 如何获取传递给 eval 方法的 block 的返回值?

android - 如何将所选项目从 ListActivity 返回到另一个 Activity?

python - 返回值不正确,未获得 'True' 返回,Python

c++ - 在 C++ 中动态改变指针的大小

c++ - 按值传递与按右​​值引用传递

C++ 使用动态分配的内存乘法矩阵

c - 如何创建 scanf() 的替代品