标签: memset

memset 上程序崩溃?

我正在挣扎memset

如果我在数组中写入,我的程序就会崩溃。如果我注释掉memset我就没有问题。

我的类型结构:

typedef struct  
{
    char Frage  [maxLEN_F_A];
    char Antwort[maxLEN_F_A];
} Fragenfeld;
Run Code Online (Sandbox Code Playgroud)

我的结构声明:

Fragenfeld QuizFragen[maxFragen];
Fragenfeld *ptrQuizFragen = QuizFragen;
Run Code Online (Sandbox Code Playgroud)

通话memset

memset(&ptrQuizFragen,0,maxFragen*sizeof(Fragenfeld));
Run Code Online (Sandbox Code Playgroud)

我的函数,我在其中编辑地址的值:

int Fragen_einlesen(Fragenfeld *Quizfragen)
{
....
strncpy(Quizfragen->Frage,sEingabe, maxLEN_F_A);
}
Run Code Online (Sandbox Code Playgroud)

c pointers memset

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

将指针传递给保证归零的内存

我需要将文件中不同大小的记录归零.为此,我正在分配虚拟记录,将memset它们归零,并将它们传递给写入函数.

是否有一些区域可以保证始终为零(并且大小足够大),我可以反而指出,不需要重复分配和清零内存?

c malloc optimization memset

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

memsetting初始化缓冲区的原因是什么

在浏览维基百科之后,我偶然发现了以下代码示例,该示例将char缓冲区初始化为0,但memset在使用之前将其初始化为0.这有必要吗?如果是这样,为什么?我问的原因是我不是专家,并且这个例子清楚地表明这是编码器的意图,其中注释" /* Really initialized to zeroes */" 与初始化上的memset" /* initialized to zeroes */" 相反.

编辑:注意,我已经在维基百科页面上回滚了导致这种情况的编辑,因此它在链接中不再可见.

c initialization memset

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

Memset枚举数组值设置不正确(C/C++)

我正在尝试使用memset将枚举数组中的所有值设置为单个值,但我没有看到正确的结果.第一个memset工作,第二个没有.我的代码:

// definitions
#define NUM_THREADS     1

enum ThreadState
{
    INITIALIZING,
    READY_TO_CALCULATE,
    CALCULATED,
    READY_TO_UPDATE,
    UPDATED
};


// Later on, in the code...
ThreadState Thread_States[NUM_THREADS];

// Somehow this works - after this statement, every entry in Thread_States is INITIALIZING
memset(Thread_States, INITIALIZING, NUM_THREADS* sizeof(ThreadState));

// ... later on (or even immediately right after) ...

// Failure - after this statement, every entry in Thread_States is 16843009
memset(Thread_States, READY_TO_CALCULATE, NUM_THREADS* sizeof(ThreadState));
Run Code Online (Sandbox Code Playgroud)

正如评论中所解释的那样,我第一次调用memset时,值被设置为我期望的值(INITIALIZING,即0).当我运行第二个语句时,我没有看到值设置为READY_TO_CALCULATE(即1).相反,当我检查调试器时,它们被设置为16843009.

有没有理由相对简单地使用memset的行为不一致?

谢谢.

c c++ arrays enums memset

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

错误:未在此范围内声明'memset'

我正在尝试编译本页末尾提供的完整示例8:http://www.physics.wisc.edu/~craigm/idl/cmpfit.html

但我收到此错误:错误:'memset'未在此范围内声明

我一直在寻找如何解决这个错误,我看到有些人通过添加#include <string.h>到代码的头部来解决它.我尝试过,但我仍然得到同样的错误.

我在Ubuntu 12.04 LTS上使用gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)

我正在尝试编译:

g++ -o example example.cpp -lmpfit -lm
Run Code Online (Sandbox Code Playgroud)

c++ compilation memset

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

我需要在Swift中设置一个C结构吗?

AFAIK,在swift中,调用类/结构的默认初始化器会将所有内容初始化为0,nil.在C(例如套接字编程)中,有时memset用于在使用struct之前将所有内容设置为0.我是否需要在swift中使用memset,或者我写它的方式很好?

(BTW,在这种情况下memset使用是因为hints除了2个参数以外应该设置为0.非0(垃圾等)res在调用时会产生副作用getaddrinfo.

C:

struct addrinfo hints, *res;
int status;

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

status = getaddrinfo(NULL, MYPORT, &hints, &res);
Run Code Online (Sandbox Code Playgroud)

迅速:

var res = UnsafeMutablePointer<addrinfo>()
var hints = addrinfo()
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM

let status = getaddrinfo(nil, MYPORT, &hints, &res)
Run Code Online (Sandbox Code Playgroud)

c struct memset swift

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

C memset - 优雅地添加一个null终止符

我按照如何memset char数组与空终止字符?使用C memsetapi 时添加空终止符.

代码有效; 由于null终止符,我不再在malloc'd char数组的末尾添加奇怪的内存中字符.

/* memset does not add a null terminator */
static void yd_vanilla_stars(size_t *number_of_chars, char *chars_to_pad)
{
    memset(chars_to_pad, 0, *number_of_chars+1);
    memset(chars_to_pad,'*',*number_of_chars);
}
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式实现同​​样的目标?

c malloc memset

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

如何在C中将数组的一个维度设置为零

假设我有一个全局声明的3d数组(在数据段中),我想将其1d memset为0.

int multi_dimension_array[x][y][z];
Run Code Online (Sandbox Code Playgroud)

我可以用线条记住整个事情:

memset(multi_dimension_array, 0, sizeof(multi_dimension_array));
Run Code Online (Sandbox Code Playgroud)

但是现在假设我只想将x维度设置为某个值(比如2),这意味着multi_dimension_array [2] [0] [0]到multi_dimension_array [2] [y-1] [z-1]的值应该全部为零.我不认为这是一个聪明的方法来使用memset y或z,因为它们不是连续的.以下行应该有效:

memset(&multi_dimension_array[2][0][0], 0, sizeof(multi_dimension_array[2][0][0]) * y * z);
Run Code Online (Sandbox Code Playgroud)

我的"问题"是我不喜欢memset param的*y*z部分.数组中是否存在sizeof(multi_dimension_array [2])== byte_size_of_type*y*z?

我想使用sizeof将在此示例中评估为"x"维度的正确字节数的数组属性.我不想在有人改变声明中的大小并且他们不改变这个memset的情况下使用*y*z,而且我不喜欢它看起来如何.

c memset

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

memset和std :: complex &lt;double&gt;的动态数组

由于std :: complex是非平凡的类型,请使用GCC 8.1.1编译以下内容

complex<double>* z = new complex<double>[6];
memset(z,0,6*sizeof*z);
delete [] (z);`
Run Code Online (Sandbox Code Playgroud)

产生警告

清除非平凡类型的对象

我的问题是,这样做实际上有潜在的危害吗?

c++ memset

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

malloc()和memset()行为

我写了一些代码来看看如何malloc()memset()表现,我发现了一个我不知道发生了什么的情况.

我曾经malloc()为字符数组分配15个字节的内存,我想看看如果我memset()错误地在我创建的指针中设置了100个字节的内存会发生什么.我希望看到它memset()设置了15个字节(并且可能会丢弃一些其他内存).我在运行程序时看到的是它为我编码的字符设置了26个字节的内存.

知道为什么为我创建的指针分配了26个字节?我正在用gcc和glibc编译.这是代码:

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

#define ARRLEN 14

int main(void) {

    /* + 1 for the null terminator */
    char *charptr = malloc((sizeof(*charptr) * ARRLEN) + 1);
    if (!charptr)
        exit(EXIT_FAILURE);

    memset(charptr, '\0', (sizeof(*charptr) * ARRLEN) + 1);

    /* here's the intentionally incorrect call to memset() */
    memset(charptr, 'a', 100);

    printf("sizeof(char)   ------  %ld\n", sizeof(char));
    printf("sizeof(charptr)   ---  %ld\n", sizeof(charptr));
    printf("sizeof(*charptr)  ---  %ld\n", sizeof(*charptr));
    printf("sizeof(&charptr)  ---  %ld\n", …
Run Code Online (Sandbox Code Playgroud)

c malloc gcc glibc memset

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

标签 统计

memset ×10

c ×8

c++ ×3

malloc ×3

arrays ×1

compilation ×1

enums ×1

gcc ×1

glibc ×1

initialization ×1

optimization ×1

pointers ×1

struct ×1

swift ×1