gpt4 book ai didi

c++ - 传递 shared_array 参数

转载 作者:太空宇宙 更新时间:2023-11-04 16:25:14 25 4
gpt4 key购买 nike

下面的代码在取消注释时会崩溃,而且 get() 中的 shared_array<> 参数似乎有问题。

至少现在 print() 似乎没有崩溃......

传递 shared_array<> 参数的正确方法是什么?

#include <iostream>
#include <cstring>
#include <boost/shared_array.hpp>
using namespace std;
using namespace boost;

shared_array<wchar_t> get(const wchar_t* s) {
//shared_array<wchar_t> get(const shared_array<wchar_t>& s) {

size_t size = wcslen(s);
//size_t size = wcslen(s.get());

shared_array<wchar_t> text(new wchar_t[size+1]);

wcsncpy(text.get(), s, size+1);
//wcsncpy(text.get(), s.get(), size+1);

return text;
}

void print(shared_array<wchar_t> text) {
wcout << text.get() << endl;
}

int wmain(int argc, wchar_t *argv[]) {
//shared_array<wchar_t> param(argv[1]);

shared_array<wchar_t> text = get(argv[1]);
//shared_array<wchar_t> text = get(param);

print(text);
//print(text.get());
}

编辑:谢谢。所以这里的关键点是在使用 boost::shared_ptr/array 时我应该总是只使用 new/new[]。

固定的主要功能:

int wmain(int argc, wchar_t *argv[]) {
size_t szArg = wcslen(argv[1]);
wchar_t* paramBuf = new wchar_t[szArg+1];
wcscpy_s(paramBuf, szArg+1, argv[1]);
shared_array<wchar_t> param(paramBuf);

shared_array<wchar_t> text = get(param);

print(text);
}

其实一开始我在栈中分配了paramBuf所以找不到错误。

WRONG:    
int wmain(...) {
wchar_t paramBuf[100];
wcscpy_s(paramBuf, 100, argv[1]);
...
}

最佳答案

问题出在线路上:

shared_array<wchar_t> param(argv[1]);

shared_array 需要用一个指向分配给 new[] 的数组的指针来初始化,但是 argv[1] 只是一个 c 字符串,所以当它超出范围(即变量参数)时,shared_array 的析构函数调用 delete [] 在 argv[1] 上是不允许的。

关于c++ - 传递 shared_array<T> 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com