假设我有这个结构
typedef struct person{
char firstName[100], surName[51]
} PERSON;
Run Code Online (Sandbox Code Playgroud)
我正在通过malloc分配空间并用一些值填充它
PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");
Run Code Online (Sandbox Code Playgroud)
释放该结构所占用的所有内存的正确和安全的方法是什么?是"免费的(testPerson);" 够了还是我需要逐个释放每个结构的属性?
它引出了另一个问题 - 结构如何存储在内存中?我注意到一种奇怪的行为 - 当我尝试打印结构地址时,它等于它的第一个属性的地址.
printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);
Run Code Online (Sandbox Code Playgroud)
这意味着这个free(testPerson)应该等于这个free(testPerson-> firstName);
那不是我想做的.
谢谢
我试图了解HTTPS的工作原理,并进行一些实际测试。
我有一个通过TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA加密的HTTPS通信捕获的数据。
如果我理解正确,客户端将在TLS握手期间创建一个主密钥,然后使用服务器的公钥对该主密钥进行加密并将其发送到服务器。然后将此主密钥(作为纯文本)用作对称密钥,用于加密正在进行的通信。它是否正确?
如果是,如果知道主密钥,如何解密数据?
一开始听起来很容易,所以我只写了这个脚本
$masterKey = '8ef36f0eb2c10ea6142693374f6c5c7ae65eee5f6bd45bd1990b08e6c144227382726496b795d62284bd8c6c0cadbbdb';
$someRandomEncryptedData = '170303001D314A69C7DF95E07AAF51FBDA01C178D45330BC902308DF8C418FA5B02B';
$sDecrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, pack('H*', $masterKey), pack('H*', $someRandomEncryptedData), MCRYPT_MODE_CBC);
echo $sDecrypted;
Run Code Online (Sandbox Code Playgroud)
然后,我注意到主密钥的长度为96字节(二进制字符串为48),这导致PHP警告,因为密钥的长度应为256位(32字节)。我想念什么吗?
我有一个分配字符串并返回其指针的函数.当我直接在其他功能的调用中使用它时,我是否需要释放内存?
例如:
char *getRow(){
char *someString = (char*) malloc(sizeof(char) * 10);
strcpy(someString , "asdqwezxc");
return someString;
}
int main(){
printf("%s", getRow());
}
Run Code Online (Sandbox Code Playgroud)
在该函数中分配的内存会发生什么?有没有办法解放它或者我需要在使用之前将它存储到某个变量中?