标签: memset

如何使用memset将内存指针设置为NULL?

我有一个结构

typedef struct my_s {

   int x;
   ...
} my_T;

my_t * p_my_t;
Run Code Online (Sandbox Code Playgroud)

我想设置的地址p_my_tNULL,到目前为止这是怎么了,我试着这样做:

memset (&p_my_t, 0, sizeof(my_t*))
Run Code Online (Sandbox Code Playgroud)

不过,这对我来说并不合适.这样做的正确方法是什么?


问题修正案 - 提出一个更复杂的问题:

这是我想要做的:

  • 两个过程,A和B.
  • 在A中的malloc p_my_t,B有N个线程并且可以访问它
  • 在A中开始删除,但我不能简单地释放它,因为B中的线程可能仍在使用它.
  • 所以我调用一个函数,将p_my_t的地址传递给B,在B中将其地址设置为NULL,这样B中的其他线程就不能再使用了
  • 从B回电后,我在A中释放内存

注意:没有标准的方法来通过进程之间的共享内存来管理内存分配.你将不得不做一些相当仔细的思考发生了什么.

c++ null pointers memset

4
推荐指数
1
解决办法
2万
查看次数

为什么发布版本memset比visual studio 2012中的调试版本慢?

为什么发布版本memset比visual studio 2012中的调试版本慢?在视觉sutido 2010中,也是这样的结果.我的电脑:

英特尔酷睿i7-3770 3.40GHz 8G内存操作系统:windows 7 sp1 64bit

这是我的测试代码:

#include <boost/progress.hpp>

int main()
{
    const int Size = 1000*1024*1024;
    char* Data = (char*)malloc(Size);

#ifdef _DEBUG
    printf_s("debug\n");
#else
    printf_s("release\n");
#endif

    boost::progress_timer timer;
    memset(Data, 0, Size);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

release
0.27 s

debug
0.06 s
Run Code Online (Sandbox Code Playgroud)

编辑:

if i change code to this, it will get the same result:

#include <boost/progress.hpp>

int main()
{
    const int Size = 1000*1024*1024;
    char* Data = (char*)malloc(Size);
    memset(Data, 1, Size);

#ifdef _DEBUG
    printf_s("debug\n");
#else …
Run Code Online (Sandbox Code Playgroud)

c++ memset visual-studio-2012

4
推荐指数
1
解决办法
615
查看次数

删除调用memset?

为什么在调用delete this;以下函数后调用堆栈?

msvcr110d.dll!_VEC_memset(void * dst, int val, int len) 
Run Code Online (Sandbox Code Playgroud)

请考虑operator delete没有超载.

c++ memset delete-operator

4
推荐指数
1
解决办法
926
查看次数

memset()初始化构造函数中的对象?

我发现这段使用memset()初始化对象的C++代码:

struct Message
{
   Message()
   {
      memset(this, 0, sizeof(Message));
   }

   unsigned int a, b, c;
};
Run Code Online (Sandbox Code Playgroud)

由于这是一个POD结构,这个代码应该没问题.
使用memset而不是构造函数是否有任何优势,例如:

Message() : a(0), b(0), c(0) {}
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization memset

4
推荐指数
2
解决办法
1293
查看次数

使用 memset 初始化整个数组

我已经用值 1 初始化了整个数组,但输出显示了一些垃圾值。但是,如果我使用 0 或 -1 代替 1,该程序可以正常工作。那么,对于可以使用 memset 初始化的值类型是否有一些限制。

 int main(){
    int a[100];
    memset(a,1,sizeof(a));
    cout<<a[5]<<endl;
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ arrays memset

4
推荐指数
2
解决办法
8271
查看次数

字节设置无符号短

我正在尝试使用memset以下方法单独设置无符号短变量中的字节:

#include <cstring>
#include <iostream>

int main()
{
  unsigned short test2; // 2 bytes

  std::cout << "size of test2: " << sizeof(test2) << std::endl;

  memset(&test2, 0, 2); 
  memset(&test2, 0x4D, 1);                                                               
  memset(&test2+1, 0x42, 1); 

  std::cout << "value: " << test2 << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

size of test2: 2
value: 77
Run Code Online (Sandbox Code Playgroud)

77是0x4D.所以由于某种原因,它没有拿起我试图在变量的第二个字节上设置的0x42.这是为什么?

c++ memset

4
推荐指数
1
解决办法
290
查看次数

对 memset 的未定义引用

我使用系统调用编写了简单的c程序,当我用gcc编译它时它工作得很好。但是当我尝试使用命令生成 shell 代码 (shellforge) 时

./sf.py username.c
Run Code Online (Sandbox Code Playgroud)

我收到错误说明

Undefined reference to memset
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?这是我的代码

#define O_CREAT     0100
#define O_WRONLY    01
#define O_APPEND    02000
#define IDLEN 100
int main(void)
{
    char user_name[IDLEN]="";
    char pass1[IDLEN]="";
    char pass2[IDLEN]="";
    int fd,a,b,c;

    //to give user direction
    char user[]="Please type your username and hit enter:\n";
    char p1[]="Please type password and hit enter:\n";
    char p2[]="Please type password and hit enter:\n";

    write(1,user,sizeof(user));
    a=read(0,user_name,IDLEN);
    user_name[a-1]='\0';
    while(1)
    {
        write(1,p1,sizeof(p1));
        b=read(0,pass1,IDLEN);
        pass1[b-1]='\0';
        write(1,p2,sizeof(p2));
        c=read(0,pass2,IDLEN);
        pass2[c-1]='\0';

        int temp=0;
        while(pass1[temp] == pass2[temp])
        {
            if(pass1[temp] …
Run Code Online (Sandbox Code Playgroud)

c unix system-calls memset shellforge

4
推荐指数
1
解决办法
2万
查看次数

memset导致std :: string赋值崩溃

我的代码适用于Windows,但现在我使用Xcode 3.2.5 C/C++编译器版本GCC 4.2移植到MAC,它崩溃了.

我把它缩小到了一个memset电话.如果我注释掉memset它的工作原理,如果我把它放回代码崩溃.

我的头文件中有一个看起来像这样的结构:

typedef struct 
{
    int deviceCount;
    struct 
    {
        #define MAX_DEVICE_ID 256
        #define MAX_DEVICE_ENTRIES 10
        std::string deviceId;   // Device name to Open
        TransportType   eTransportType;
    } deviceNodes[MAX_DEVICE_ENTRIES];
} DeviceParams;
Run Code Online (Sandbox Code Playgroud)

然后在cpp文件中我有这个:

DeviceParams Param;
memset(&Param, nil, sizeof(Param));
Run Code Online (Sandbox Code Playgroud)

......后来我有这个:

pParam->deviceNodes[index].deviceId = "some string"; // <----- Line that crashes with memset
Run Code Online (Sandbox Code Playgroud)

就像我之前说的,如果我删除memset调用一切正常.如果我在调用memset之前查看调试器,我的结构中的字符串是\ 0,而在memset之后它们是nil.

为什么nil字符串在赋值行上崩溃而且只在MAC上崩溃?

谢谢.

c++ string crash xcode memset

3
推荐指数
2
解决办法
1947
查看次数

指针偏移在memset中不起作用?

普通的C,在Windows 7和HP机器上.

int main(void) {

    unsigned int a =  4294967295;
    unsigned int *b = &a;

    printf("before val: '%u'\n", *b); // expect 4294967295, got 4294967295

    memset(b+2, 0, 1);

    printf("after val: '%u'\n", *b);
    // little endian          4th      3rd     2nd       1st
    // expect 4278255615 - 11111111 00000000 11111111 11111111
    // got    4294967295 - 11111111 11111111 11111111 11111111

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我想将整数的第三个字节设置为0x0,但保持不变.有任何想法吗?谢谢.

在我的机器上,int是32位.

c memset

3
推荐指数
1
解决办法
1768
查看次数

为什么memset不能分配1?

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

int color[1001][1001];

int main() {
    int i, j;
    memset(color, 1, sizeof(color[0][0]) * 2 * 2);
    for(i = 0; i < 4; i++) {
        for(j = 0; j < 4; j++) {
            printf("%d ", color[i][j]);
        }
        printf("\n");
    }
    printf("\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

16843009 16843009 16843009 16843009 
0 0 0 0 
0 0 0 0 
0 0 0 0 
Run Code Online (Sandbox Code Playgroud)

为什么不分配1?为什么不打印1而不是16843009?如何分配整数1?

但如果我写memset(color, 0, sizeof(color[0][0]) * 2 * 2);然后输出:

0 …
Run Code Online (Sandbox Code Playgroud)

c c++ memset

3
推荐指数
3
解决办法
1094
查看次数