小编use*_*099的帖子

C - 释放结构

假设我有这个结构

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);

那不是我想做的.

谢谢

c malloc struct

47
推荐指数
4
解决办法
8万
查看次数

如何解密HTTPS(ECDHE)数据?

我试图了解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字节)。我想念什么吗?

php encryption https elliptic-curve diffie-hellman

5
推荐指数
1
解决办法
3862
查看次数

C - 释放功能中分配的内存

我有一个分配字符串并返回其指针的函数.当我直接在其他功能的调用中使用它时,我是否需要释放内存?

例如:

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)

在该函数中分配的内存会发生什么?有没有办法解放它或者我需要在使用之前将它存储到某个变量中?

c memory allocation function

4
推荐指数
1
解决办法
7698
查看次数