草庐IT

c++ - char 到大写赋值段错误

为了进一步了解C++的内部工作原理,我决定编写自己的字符串类。但是我被困在.toUpper()和.toLower()函数上。这是我的代码。Text&toUpper(){char*c=this->str;while(*c!=0,c++){if((*c>='a')&&(*c我已将导致段错误的行隔离到*c=*c-32但我不明白为什么这会导致问题。我尝试了(char)(*c-32)但这没有用。这也不是一个边界问题,因为没有任何输出。有什么想法吗?更新:我的构造函数Text(char*str){this->str=str;this->updateLength();//glorifiedstrle

c++ - 为什么我没有收到此代码的段错误? (总线错误)

我的代码中有一个像这样的错误。chardesc[25];charname[20];charaddress[20];sprintf(desc,"%s%s",name,address);理想情况下,这应该会导致段错误。但是,我看到这给出了一个总线错误。维基百科按照“总线错误”的顺序说了一些事情,当程序试图访问未对齐的内存位置时,或者当您尝试访问不存在或不允许的物理(非虚拟)内存位置时。'上述语句的第二部分听起来类似于段错误。所以我的问题是,你什么时候得到SIGBUS,什么时候得到SIGSEGV?编辑:-不少人提到了上下文。我不确定需要什么上下文,但这是一个缓冲区溢出,位于一个静态类函数中,

c++ - 无法理解这段代码……是 C++11 吗?

这个问题在这里已经有了答案:UnnecessarycurlybracesinC++(14个答案)关闭9年前。我遇到一个项目,在那里我发现了一些我无法理解的代码。我刚开始使用C++,所以这对我来说似乎是个大问题。我提供了几行我无法理解的项目。classabc{public://somestuffabc();};abc::abc(){intsomeflag=0;//codeif(someflag==0){do{//fewstrcpyoperations{//(MyQuestion)Withoutanyconditionbracesstarted//variableinitializatio

c++ - 带有受歧视 union 和可选<>的奇怪段错误

我想知道在这个使用std::experimental::optional和union类型的简单示例中,是什么导致了段错误。奇怪的是,段错误在clang和gcc中都发生了,但是发生在两个不同的地方。我也对从下面的日志中看到的大量复制和破坏感到困惑,想知道是否有更好/惯用的方法来避免这么多明显冗余的操作?在这种情况下,假设这里的所有对象都是按值传递和访问的,是否有助于将所有构造函数切换为采用右值引用并在所有地方使用std::move?#include#include//https://github.com/akrzemi1/Optional#include"Optional/optiona

c++ - 看不懂这段代码?

任何人都可以帮助我理解以下代码:-intr,countIt(intn){while(r+="2"[n%10]&3,n/=10);returnr;}我在codefights.com的一项挑战中找到了这段代码,https://codefights.com/challenge/v5Zg8trjoun3PTxrZ/solutions/Aj3ppbhSShixt4nBi这是计算数字中孔数的解决方案。例如1111=00000=41234=08888=8我无法理解以下内容:1.这段代码的逻辑2.函数返回数据类型中使用的逗号(,)运算符3.字符串后使用[]操作符。4.实际上是整个代码。

可以绑定Azure功能路线的通配符段吗?

我正在尝试创建一个采用通配符路线细分市场的Azure功能。但是,当我尝试将通配符段作为方法参数时,我会收到以下错误:0Microsoft.Azure.WebJobs.Host.FunctionInvocationException:Exceptionwhileexecutingfunction:Functions.Page--->System.InvalidOperationException:Exceptionbindingparameter'path'--->System.InvalidOperationException:Novaluewasprovidedforparameter'pa

c++ - 这段代码在 C++ 中合法吗

我刚刚发现,当涉及到模板时,这段代码在g++3.4.2中编译并且可以工作,除非不调用m():templateclassC{Te;public:C():e(0){};voidm(){e=0;};};现在可以创建和使用实例了Cc;在c.m()未被调用之前,没有编译错误,但这是合法的吗? 最佳答案 是的,这是合法的。模板规范是,在实例化方法之前,它不存在,因此编译器不会检查它。这是来自thespec的相关内容:14.7.1-Implicitinstantiation-9-Animplementationshallnotimplicitly

c++ - 函数退出时出现段错误的可能原因

在C++中退出函数时出现段错误,您能想到哪些可能的原因?我的意思是,我在C++程序中有一个可重现的段错误,当我调查使用GDB时说ProgramreceivedsignalSIGSEGV,Segmentationfault.FooBar(bla=...)atfoo.cpp:5959}指示的行包含我的函数的右括号。 最佳答案 这可能有很多原因。在Valgrind下运行程序,它很可能会告诉您确切的原因,或者至少会帮助调查和缩小问题范围。 关于c++-函数退出时出现段错误的可能原因,我们在Sta

c++ - 一个简单的 std::shared_ptr 构造案例的段错误

来自cppreference我了解到std::shared_ptr有一个构造函数:templateexplicitshared_ptr(Y*ptr);然后我试了一段代码如下:#include#include#includeintmain(void){///block1{std::shared_ptrs1(newstd::string("good"));std::shared_ptrs2(s1.get());///s2std::cerri1(newint(1));std::shared_ptri2(i1.get());///i2std::cerr它会导致block1的段错误,但不会导致b

c++ - std::future<neither::Either<int, std::string>> 段错误

本题中的代码使用了Either在这里找到实现:https://github.com/LoopPerfect/neither.明确地说,我怀疑这是这个特定库的问题,否则我会在那里制造问题。以下代码段按预期工作:std::futuref=std::async(std::launch::async,[](){return"test";}std::cout下面会产生一个段错误:std::future>f=std::async(std::launch::async,[](){returnneither::Either(neither::right(std::string("test")));})