使用memset()函数及其如何影响内存块

she*_*lbc 1 c memory pointers

我编写了一个程序,它自动为结构分配内存,然后在该结构中设置一个等于零的字段.

我想,为什么不将整个区块归零,而不是仅将该成员设置为零?来了memset().

使用此功能后,我的程序不再有效.一旦我尝试将值分配给该内存块中包含的结构中的字段,程序就会因分段错误错误而崩溃.

所以,这让我想知道 - 当通过malloc()/ AUTO分配一块内存时,是否有其他信息存储在这个位置,这是访问和使用这个空间所必需的?

typedef struct{
    NodeT *nodes[MAX_SIZE];
    int count; 
} stackT;

stackT stack;
stackT* ptr = &stack;

void init(stackT* stackPtr){
    //stackPtr->count = 0;
    memset(stackPtr, 0, sizeof(stackptr));
}
Run Code Online (Sandbox Code Playgroud)

Man*_*dey 5

请通过传递结构的大小而不是指针的大小来做一个memset:

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

话虽如此,malloc会返回一个指向地址块的指针(让我们说N个字节).接下来,您需要将相同的指针传递给memset并且大小为N .. malloc返回的指针不包含任何其他可能受到memset影响的信息.