#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();
}
你可以像这样访问字符串中的字符数组。但是,我认为这是一个未定义的行为。这种行为使得字符串的许多特性无法工作。
我想知道的是,这种方法是否会导致内存泄漏?
1条答案
按热度按时间yrefmtwq1#
是的,你是对的,这是未定义的行为。有了未定义的行为,任何事情都可能发生。这确实包括“内存泄漏”,它可以单独发生,也可以与任何其他症状结合发生。
当然,当其他问题是“崩溃”或“计算机着火”时,“内存泄漏”就不是那么重要了。所以只要添加一个
s.resize(3)
。这就解决了UB。