c++ 当我直接通过访问std::string中的char数组的地址来改变它时,是否可能发生内存泄漏?

ykejflvf  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(106)
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    char* c =  &s[0];
    c[0] = '4';
    c[1] = '3';
    c[2] = '\0';
    
    cout << s.data();
}

你可以像这样访问字符串中的字符数组。但是,我认为这是一个未定义的行为。这种行为使得字符串的许多特性无法工作。
我想知道的是,这种方法是否会导致内存泄漏?

yrefmtwq

yrefmtwq1#

是的,你是对的,这是未定义的行为。有了未定义的行为,任何事情都可能发生。这确实包括“内存泄漏”,它可以单独发生,也可以与任何其他症状结合发生。
当然,当其他问题是“崩溃”或“计算机着火”时,“内存泄漏”就不是那么重要了。所以只要添加一个s.resize(3)。这就解决了UB。

相关问题