C++一个运行时的异常,就是调不对,前辈们帮忙看看吧
错误提示如下:
.....中的 0x102ca6d0 (msvcr100d.dll) 处最可能的异常: 0xC0000005: 写入位置 0x004eae81 时发生访问冲突。
代码如下:
private:
static void split(TCHAR *src, const TCHAR *separator, vector<float>& dest)
{
TCHAR* token;
token = _tcstok(src, separator);//这行的断点过不去,程序弹出警告框(黄色叹号),内容如上。
while(token != NULL)
{
dest.push_back(chars2Num(token));
token = strtok(NULL, separator);
}
}
调用处是同一个class里的另外一个方法:
public:
static void fillPen(Pen* pen, LineType lineType)
{
std::vector<float> dashArray;
TCHAR* typeValue;
switch(lineType)
{
case .....:
typeValue = "9,3,3,6";
break;
}
split(typeValue, ",", dashArray);
}
报错后vs2010会跳到一个“mbstok_s.inl”的文件,在第116行有黄色箭头提示,代码如下:
if (*ctl != 0)
{
*_String++ = 0;
if (dbc)
{
*_String++ = 0;
}
break;
}
另外,只能用TCHAR或BSTR,我都不会……一开始用string写完被告知不可以......
(刚开始学,这些东西搞得乱七八糟,各种宏各种不同的库……哎~吐槽完毕)
[解决办法]
typeValue = "9,3,3,6"; 这个指针指着const 内存, _tcstok(src, separator);这个函数会修改const内存...
你改一下
char typeValue[128] = {0};
strcpy(typeValue,"9,3,3,6");
[解决办法]
++