草庐IT

warn_memset_zero_len

全部标签

c++ - “Warning: comparison is always true”

带有-Wextra的GCC(4.7.2)发出以下警告/错误信号(我启用了-Werror):Comparisonisalwaystrueduetolimitedrangeofdatatype[-Wtype-limits]对于以下代码[tryonline]:template(std::numeric_limits::max())structvalidator{staticconstexprboolvalidate(Tvalue){returnstatic_cast(value)structvalidator{staticconstexprboolvalidate(T){returntrue

c++ - 无法使用大小和类型参数调用 OpenCV 的 Mat::zeros

我正在尝试创建一个与另一个尺寸和类型相同的Mat。新的Mat的所有元素都应该为零,所以我尝试了Mat::zeros(size,type)函数,定义为:staticMatExprzeros(Sizesize,inttype);这是我的代码。假设我已经有一个Matg(通过imread创建):Math=Mat::zeros(g.size,g.type());这会给我一个编译器错误,并提示:没有用于调用“zeros”的匹配函数我做错了什么? 最佳答案 您偶然发现了cv::Mat的一个怪癖。size字段不返回cv::Size,而是返回Mat:

C++:使用 memset 还是结构构造函数?什么是最快的?

我无法确定哪个在C++中更好:我使用一个结构来管理消息队列中的客户端,该结构如下所示:typedefstruct_MsgClient{inthandle;intmessage_class;void*callback;void*private_data;intpriority;}MsgClient;所有这些都是POD实体。现在,我有一个这些结构的数组,用于存储我的客户(我使用一个数组来限制内存,我必须限制碎片)。所以在我的课上我有这样的东西:classFoo{private:MsgClient_clients[32];public:Foo(){memset(_clients,0x0,si

char* 上 memset 的 C++ 等价物

我有这个代码char*oldname=newchar[strlen(name)+1];memcpy(oldname,name,strlen(name)+1);name=newchar[strlen(oldname)+strlen(r.name)+1];memset(name,'\0',strlen(name));strcat(name,oldname);strcat(name,"");strcat(name,r.name);我明白使用memcpy和memset是不行的,但我还不明白如何在C++中使用它,最好不使用std。有人知道吗?谢谢。 最佳答案

c++ - Memset 一个 int(16 位)数组到 short 的最大值

似乎无法在任何地方找到这个问题的答案,如何将数组memset为数组类型的最大值?我原以为memset(ZBUFFER,0xFFFF,size)可以在ZBUFFER是16位整数数组的情况下工作。相反,我始终得到-1。此外,我们的想法是尽可能快地完成这项工作(它是一个需要初始化每一帧的zbuffer)所以如果有更好的方法(并且仍然一样快或更快),请告诉我。编辑:作为澄清,我确实需要一个带符号的int数组。 最佳答案 在C++中,您将使用std::fill和std::numeric_limits。#include#include#incl

c++ - "Warning: corrupt .drectve at end of def file"是什么意思?

这个问题在这里已经有了答案:Warning:corrupt.drectveatendofdeffile(3个答案)关闭去年。在这个环境下,我编译了一个c++/openGL的例子贴在网上:Windows7代码::Blocksv13.12MinGW构建于2013年10月(不确定版本)mingw32-g++v4.8.1来自codeincodeblock.com的代码:#defineGLEW_STATIC//third-partylibraries#include#include#include#include#include#include#includeGLuintgVAO=0;GLuin

c++ - 如何防止将 `#warning` 消息视为错误?

我正在尝试在现有代码库中编译引入-Werror标志。我遇到的问题之一是在某些地方#warning用于显示信息性消息。这些不应被视为错误。一个解决方案是使用#pragmamessage代替,但这似乎不受旧版本gcc的支持。(我们的构建服务器使用gcc4.1.2)。谁能帮我解决这个问题? 最佳答案 在gcc-4.6及以上版本中,可以使用-Wno-error=cpp。至少在Lion及以后发布的clang中,您可以使用-Wno-error=#warnings。但是由于您的构建服务器使用古老的gcc,您可能在那里运气不好。通常,传递-fdia

c++ - memset 指针数组的正确方法是什么?

如果我有T(T*)类型的指针并且我有一个数组T*array[N]这两种方法是否允许我稍后检查哪些条目是空指针以延迟初始化每个存储桶中的内容?memset(数组,0,sizeof(T*)*N);或for(inti=0;i即memset调用还会让我稍后执行if(array[i]==NULL)...吗?如果不是的话,我不想引入未定义的行为.. 最佳答案 虽然技术上不要求空指针值全为零位,但我不知道有哪个系统不是全为零位。所以这两种方法都应该有效。然而,有一种更简单的方法来初始化一个数组,即使在一些邪恶的实现中也会设置正确的空指针值:T*a

c++ - 在 constexpr 函数中返回一个 C 字符串 : why no warning from the compiler?

考虑以下代码:constexprautof(){autostr="HelloWorld!";returnstr;}intmain(intargc,char*argv[]){staticconstexprautostr=f();std::cout我的编译器不显示任何警告是否正常?它是定义的行为吗?我能保证程序会显示"HelloWorld!"吗?我希望"HelloWorld!"不会超出函数的范围... 最佳答案 在C++中stringliterals有staticstorageduration只要程序运行就可以生存。因此,指向从f返回的

c++ - 关于 "warning C4312: ' 类型转换的问题'”

这是我的代码:HWNDWebformCreate(HWNDhParent,UINTid){returnCreateWindowEx(0,WEBFORM_CLASS,_T("about:blank"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE,0,0,100,100,hParent,(HMENU)id,GetModuleHandle(NULL),0);}这是我收到的警告:warningC4312:'typecast':conversionfrom'UINT'to'HMENU'ofgreatersize这些是我的问题:为什么编译器认为转换为更大的类型是个坏主意