c++控制台程序中strcpy函数的异常.strcpy()中的
exception of strcpy function in c++ console program
异常;
void recid(string str,int *begin, int *end)
{
char *f,*str2;
const char c1[2]=":",c2[2]="-";
strcpy(str2,str.c_str());
f=strtok(str2,c1);
f=strtok(NULL,c2);
*begin=atoi(f);
f=strtok(NULL,c2);
*end=atoi(f);
}
你能帮我解决吗?
str2
是一个未初始化的指针。strcpy
不分配内存,因此当前正在尝试写入您不拥有的任意地址,并且很可能您的代码无法写入该地址。
在调用strcpy
之前,您需要将str2
指向有效内存。
str2 = (char*)malloc(str.size()+1);
strcpy(str2,str.c_str());
您还应该稍后在程序中free
内存
free(str2); // cannot dereference str2 after this point
问题是您在未初始化/随机内存位置中通过不初始化str2进行写入。
第一个解决方案:
str2 = new char[str.size() + 1];
strcpy(str2, str.c_str());
...
delete[] str2.
第二(更好的解决方案):除非迫不得已,否则不要在代码中使用指针:
std::string str2 = str1;
另外,考虑使用std::ostringstream将标记化为std::string并转换为int。
相关文章:
- 处理多个异常集合的C++方法
- 使用strcpy将char数组的元素复制到另一个数组
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 使用 strcpy 时出现异常错误
- c++控制台程序中strcpy函数的异常.strcpy()中的
- strcpy引发内存异常