gpt4 book ai didi

c++ - 给出正确的输出后给出错误段错误(核心转储)

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:34 24 4
gpt4 key购买 nike

下面给出的代码在打印段错误(核心转储)错误后给出了正确的输出总线。我多次遇到此错误,并尝试搜索它,但从未对此有清晰的了解。我使用 gdb 并收到以下错误:

程序收到信号 SIGSEGV,段错误。std::basic_string 中的 0x0000003c0c49d4d1,std::allocator >::~basic_string() ()来自/usr/lib64/libstdc++.so.6

我在哪里尝试访问无效的内存地址。如果我这样做了,它是如何给出正确结果的呢?我是 unix 和 c++ 的新手。请解释。

代码:

 #include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

string convMMDDYY(string str)
{
char *dateToConv= new char[str.length()+1];
strcpy(dateToConv,str.c_str());
char *ch = strtok(dateToConv,"-");
string date="";
string time="";
while(ch!=NULL)
{
date = date + ch[strlen(ch)-2] + ch[strlen(ch)-1] + "/" ;
ch=strtok(NULL,"-");
}

date = date.substr(0,8);

string convDate = date.substr(3,2) + "/" + date.substr(6,2) + "/" + date.substr(0,2);

unsigned found = str.find_last_of("-");
time = str.substr(found+1,8);

string convFormat = convDate + " " + time;
cout<<convFormat<<endl;
}


int main()
{
string a="2014-08-26-22:10:55.452549893";
convMMDDYY(a);
return 0;
}

程序以 2014-08-26-22:10:55.452549893 格式输入日期,并给出输出 08/26/14 22:10:55

然后给出错误 Segmentation failure (core dumped)

最佳答案

convMMDDYY 被声明为返回 string,但您没有任何 return 语句,导致函数到达末尾时出现未定义的行为。

(您还有各种其他问题,例如,您从未delete[]new[]的内存,并且缺乏错误检查,因此意外的输入会导致您的代码缓冲区溢出或访问数组越界。)

关于c++ - 给出正确的输出后给出错误段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566585/

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