首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新的TCHAR*数组

新的TCHAR*数组
EN

Stack Overflow用户
提问于 2017-12-23 11:21:17
回答 2查看 1.3K关注 0票数 1

TCHAR*数组的re-会产生负面/未定义的效果吗?或者甚至可能不推荐?到目前为止,下面的代码一直运行良好。需要投入。谢谢!

代码语言:javascript
复制
//e.g.
TCHAR *tc1 = new TCHAR[1];

// later:

//resize TCHARs
tc1 = new TCHAR[size1];
tc1[size1] = { L'\0' }; 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-23 11:25:40

这是内存泄漏。您需要delete new调用所创建的任何内容。如果你这样做,一切都会好起来的:

代码语言:javascript
复制
//e.g.
TCHAR *tc1 = new TCHAR[1];

// later:

//resize TCHARs
delete [] tc1; 
tc1 = new TCHAR[size1];
tc1[size1] = { L'\0' };

尽管不相关,但您的最后一行是在您分配的数组后面写入。那是,不是好。但这与你的内存分配无关,它本身就是一个错误。

如果使用string类,则可以避免许多这样的情况。std::string或如果您正在使用MFC,则为CString

票数 2
EN

Stack Overflow用户

发布于 2017-12-23 11:26:02

“re”的负面影响是,您丢失了指向最初分配的自由存储内存的指针。它将在整个程序的其余部分被占用,没有任何机会收回它。

当然,您可能有一些指向内存的其他指针,但这将是一段非常奇怪和不必要的复杂代码。

通过使用std::vector而不是new[]来避免所有这些问题。

tc1 =新TCHARsize1;tc1size1 ={L‘0’};

除了内存泄漏之外,这是未定义的行为,因为size1是最后一个有效的索引。

下面是一个std::vector示例:

代码语言:javascript
复制
std::vector<TCHAR> tc1(1);

// later:

//resize TCHARs
tc1.resize(size1);
tc1[size1 - 1] = L'\0'; 

也许即使是std::stringstd::wstring也足以满足您的需求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47952038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档