尝试删除/释放字符ptr而未被strtok_r
完全处理时,它会给我堆栈跟踪错误。
我知道无法通过strtok_r
func完成整个字符串分隔过程,无法以常规方式释放/删除strtok_r
字符ptr。
任何人都可以告诉我如何在strtok_r
进行处理时释放char ptr?
char *data = new char[temp->size()+1];//temp is of type string
copy(temp->begin(),temp->end(),data);
data[temp->size()]='\0';
count = 0;
while(pointData != NULL)
{
if(count == 0)
pointData = strtok_r(data,":",&data);
else
pointData = strtok_r(NULL,":",&data);
if(count == 5)//some condition to free data
delete[] data;// this produces stack trace error
cout<<pointdata<<endl;
count++;
}
答案 0 :(得分:4)
因为strtok_r正在推进“数据”,这意味着它不再指向分配的地址;你需要保持一个“freedata”指针等:
char *data, *freedata;
freedata = data = new char[temp->size()+1];
// do yer stuffz here
delete[] freedata;
答案 1 :(得分:2)
在第三个参数中传递给strtok_r
的上下文应该是指向要分隔的字符串的不同指针。尝试:
char *context;
....
pointData = strtok_r(data,":",&context);
else
pointData = strtok_r(NULL,":",&context);
我认为你无需在传入之前对其进行初始化。
答案 2 :(得分:0)
永远传递给free
的唯一指针是malloc
获得的指针,或者从指定返回指向内存的指针的函数中获取的指针“就好像“由malloc
获得。 strtok_r
不会返回指向字符串的指针,“就好像malloc
”一样,因此您不能在其上调用free
。如果您阅读了此函数的规范,它将返回一个指向输入字符串中字符的指针,该指针可能已被修改为使用空终止符来破坏分隔符。