Tag: memset

避免多类型结构的memset

我想避免在这样的结构上使用memset() : typedef struct { int size; float param1; } StructA; typedef struct { StructA a; unsigned int state; float param2; } Object; 我可以做这样的事情(伪代码,我现在无法检查)? Object obj; int *adr = (int*)&obj; for (int i; i < sizeof(obj); i++) { *adr++ = 0; } 它会将obj的每个成员设置为零吗? 编辑 :回答有关评论的问题。 我一直在研究一些情况(使用uni-type结构),其中memset比手动初始化慢两倍。 所以我会考虑尝试初始化多类型结构。 避免使用memcpy()也会很好(避免使用 lib)。

Memset与步幅

使用OpenGL,很多时候为了提高效率而需要对数据进行大幅度提升。 例如,内存结构将是顶点颜色 – 正常 – 顶点 – 颜色 – 正常…等。 是否有任何可行的选项可以改变,例如,只使用某种memset变体(即不使用循环)更改内存的颜色部分。 还有问题,是否存在循环memset这样的事情? 例如,在由四个浮点数组成的颜色数组中,将它们全部设置为特定颜色。

如何将memset用于双维数组?

我有一个双重昏暗。 数组: alarm_1_active_buffer[MAX_NUM_ALARMS][MAX_ALARM_STRING_SIZE]; 我想在填充之前清除缓冲区。 像这样 : for(index=0; index<MAX_NUM_ALARMS ; index++) { memset(&alarm_1_active_buffer[index], 0, MAX_ALARM_STRING_SIZE); memset(&alarm_1_active_buffer[index],string, MAX_ALARM_STRING_SIZE); } 它不起作用。

Glib内存分配错误

我在ubuntu上使用库libfprint ,我试图通过我的java代码调用一个函数。 API_EXPORTED struct fp_img *fpi_img_new(size_t length) { struct fp_img *img = g_malloc(sizeof(*img) + length); memset(img, 0, sizeof(*img)); fp_dbg(“length=%zd”, length); img->length = length; return img; } 我从我的java代码传递整数值5到此函数。 当我尝试执行上述function时,我遇到以下错误: GLib-ERROR **: /build/buildd/glib2.0-2.30.0/./glib/gmem.c:170: failed to allocate 3077591024 bytes 我在2个不同的ubuntu机器上尝试了相同的代码,但错误仍然相同。 我不知道为什么它试图为24 + 5长度分配这么多字节。 有人能建议我解决吗?

如何为指向数组的指针执行memset?

如何为指向数组的指针执行memset? int (*p)[2]; p=(int(*))malloc(sizeof(*p)*100); memset(p,0,sizeof(*p)*100); 这个分配是否正确?

memset没有填充数组

u32 iterations = 5; u32* ecx = (u32*)malloc(sizeof(u32) * iterations); memset(ecx, 0xBAADF00D, sizeof(u32) * iterations); printf(“%.8X\n”, ecx[0]); ecx[0] = 0xBAADF00D; printf(“%.8X\n”, ecx[0]); free(ecx); 非常简单地说,为什么我的输出如下? 0D0D0D0D BAADF00D ps:u32是unsigned int的简单typedef 编辑: 用gcc 4.3.4编译 string.h包括在内

什么是相当于memset函数的Linux内核?

我正在编写一个驱动程序,要求我清除分配给零的所有内存。 memset是一个用户空间函数,但我想知道内核是否提供了一个可以帮助我做到这一点的宏。

为什么我从未在此程序中看到Console中的Hello文本?

这是我在OS X Yosemite上运行的代码 int main(int argc, char *argv[]){ while (1) { srand(time(NULL)); int r = rand(); printf(“Allocating\n”); int *pi = malloc(5000000 * sizeof(int)); if(pi==NULL){ printf(“Hello”); } memset(pi, r, 5000000 * sizeof(int)); } } 所以这个程序最终停止运行,Console中的最后一行我看到: 分配 分配 分配 被杀:9 Korays-MacBook-Pro:hello2 koraytugay $ 如果malloc在这种情况下不返回NULL,它什么时候会这样做? 我的理解是这里发生了内存分配问题,但为什么不打印“Hello”?

在玩具示例中,必须使用’\ 0’进行memset

我在tutorialspoint中遇到了以下使用memset的例子:(我不熟悉C.) #include #include int main(){ char src[40]; char dest[100]; memset(dest, ‘\0’, sizeof(dest)); strcpy(src, “This is tutorialspoint.com”); strcpy(dest, src); printf(“Final copied string : %s\n”, dest); return(0); } 我不明白为什么使用memset行,因为当评论该行时,编译和结果是相同的。 我想问一下那行是否必要? 或者在执行strcpy()时这样做是一个好习惯吗? 或者只是一条随机线。 谢谢!

在动态bool数组上使用memset是否定义明确?

在严格别名方面,这段代码是明确定义的行为吗? _Bool* array = malloc(n); memset(array, 0xFF, n); _Bool x = array[0]; 有效类型的规则有memcpy和memmove特殊情况(C176.5§6),但不适用于memset 。 我的看法是有效类型变为unsigned char 。 因为memset的第二个参数需要转换为unsigned char (C17 7.24.6.1),并且由于有效类型的规则,(C176.5§6): …或者被复制为字符类型数组,然后该访问的修改对象的有效类型以及不修改该值的后续访问是从中复制值的对象的有效类型,如果它有一个。 问题1:在memset调用之后, array存储的数据的有效类型是什么? 问题2: array[0]访问是否违反了严格的别名? 由于_Bool不是严格别名规则中排除的类型(与字符类型不同)。