我编写了一个程序,它自动为结构分配内存,然后在该结构中设置一个等于零的字段.
我想,为什么不将整个区块归零,而不是仅将该成员设置为零?来了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)
请通过传递结构的大小而不是指针的大小来做一个memset:
memset(stackPtr, 0, sizeof(stackT));
Run Code Online (Sandbox Code Playgroud)
话虽如此,malloc会返回一个指向地址块的指针(让我们说N个字节).接下来,您需要将相同的指针传递给memset并且大小为N .. malloc返回的指针不包含任何其他可能受到memset影响的信息.