草庐IT

memsetting

全部标签

c++ - memset 导致 std::string 赋值崩溃

我有适用于Windows的代码,但现在我正在移植到MAC,使用Xcode3.2.5C/C++编译器版本GCC4.2,它崩溃了。我已将其缩小为memset调用。如果我注释掉memset它会起作用,如果我把它放回代码中就会崩溃。我的头文件中有一个看起来像这样的结构:typedefstruct{intdeviceCount;struct{#defineMAX_DEVICE_ID256#defineMAX_DEVICE_ENTRIES10std::stringdeviceId;//DevicenametoOpenTransportTypeeTransportType;}deviceNodes[

c++ - 为什么 memset 不分配 1?

这个问题在这里已经有了答案:Whyismemset()incorrectlyinitializingint?(9个回答)关闭6年前。#include#include#include#includeusingnamespacestd;intcolor[1001][1001];intmain(){inti,j;memset(color,1,sizeof(color[0][0])*2*2);for(i=0;i输出:16843009168430091684300916843009000000000000为什么不分配1?为什么它不打印1而不是16843009?我如何分配整数1?但是如果我写mem

c++ - 可以使用 memset 来填充一组 std::complex<float> 吗?

具体来说,我想知道这一行是否:memset(cjzyp,(0,0),size_cjzy*sizeof(std::complex));将填写cjzyp,complex的数组s,具有复数零值((0,0))。 最佳答案 std::memset将转换为unsignedchar的int作为第二个参数,它不会工作。使用std::fill代替http://www.cplusplus.com/reference/algorithm/fill/cjzyp=newstd::complex[100]std::fill(cjzyp,cjzyp+100,st

c++ - 使用用户定义的默认构造函数 memset 普通结构是否安全?

我知道,如果C++结构是普通旧数据(“POD”),那么这保证了它的内存结构中没有魔法,所以它意味着memcpy到字节数组和memcpy返回是安全的。我也知道在标准的POD结构中不应该有用户定义的构造函数。在我现在拥有的项目中,有一些普通结构(只有数据字段)定义了一个默认构造函数,它将数据成员初始化为0。我看到其他客户会使用memset(&obj,0,sizeofobj);在使用结构之前。在使用非POD结构之前memset是否可以或安全? 最佳答案 拥有构造函数不会使struct成为非POD。Anaggregateclassiscal

c++ - 唯一指针的 Memset

我正在将C代码转换为C++。有矩阵指针:MATRIX*matrix=NULL;matrix=newMATRIX[256];if(matrix==NULL)returnFAIL;memset(matrix,0,256*sizeof(MATRIX));然后用不同的方法填充:fillUpMatrix(matrix);在fillUpMatrix()中:memcpy(&matrix[start],&someOtherMatrix[pos],sizeof(MATRIX));后来为指针调用了memset,因为它将用一组不同的值填充:memset(matrix,0,256*sizeof(MATRIX)

c++ - 什么是 __memset_sse2 以及它为什么执行这么多指令?

我有两个算法的C++实现,称它们为A和B.A之间的唯一区别和B是那个A使用std::unordered_maphashmap;但是B使用google::dense_hash_maphashmap;.我在A中找到了一个输入与B相比慢得多我不明白为什么。对于相同的输入,我运行sudoperfrecord-einstructions./Ainput.txt然后我得到这个结果:OverheadCommandSharedObjectSymbol65.90%Alibc-2.23.so[.]__memset_sse26.63%Alibc-2.23.so[.]_int_malloc3.44%Alibc

c++ - vector<int> 上的 memset

根据MarkRansomsanswer关于使用memset,我在vector上使用memset为所有元素赋值。memset(&match_begin[0],0xff,sizeof(match_begin[0])*match_begin.size());它确实比std::fill有了显着的性能提升它工作正常(g++4.3.2、64位linux)。这段代码是否安全,如std::vector实现是否始终保证数据的内存分配是连续的?是否有可能在STL库的future(或不同的)实现中,这可能会改变并在以后破坏我的代码? 最佳答案 would

c++ - memset() 在构造函数中初始化对象?

我找到了一段使用memset()初始化对象的C++代码:structMessage{Message(){memset(this,0,sizeof(Message));}unsignedinta,b,c;};既然是POD结构,这段代码应该没问题。使用memset而不是构造函数有什么优势,例如:Message():a(0),b(0),c(0){} 最佳答案 像这样使用memset()没有任何优势。抛开所有明显的缺点和future的痛苦,有一个缺点使其效率低于Message():a(0),b(0),c(0){}这是因为POD通常存储在数组

c++ - 在包含 float 的结构上使用 memset()

在一个C/C++混合项目中,我发现了一些我可以简化为的代码#includestructStructContainingDouble{doubled;///otherelementsomitted};voidclear(StructContainingDouble*p){memset(p,0,sizeof*p);}不停止Cppcheck以引发可移植性警告Usingmemset()onstructwhichcontainsafloatingpointnumber.消息是正确的,但是由于float被声明为double,所以它似乎是误报,因为在double中,(正)零值是按照IEEE754标准

c++ - 如何使用 memset 将指向内存的指针设置为 NULL?

我有一个结构typedefstructmy_s{intx;...}my_T;my_t*p_my_t;我想将p_my_t的地址设置为NULL,到目前为止,这是我尝试这样做的方式:memset(&p_my_t,0,sizeof(my_t*))不过我觉得这不太对。这样做的正确方法是什么?问题修正-提出更复杂的问题:这是我正在尝试做的事情:两个进程,A和BA、B中的mallocp_my_t有N个线程可以访问开始在A中删除,但我不能简单地释放它,因为B中的线程可能仍在使用它。所以我调用一个函数,将p_my_t的地址传递给B以将它在B中的地址设置为NULL,这样B中的其他线程就不能再使用了从B回调