【发布时间】:2019-03-24 12:57:18
【问题描述】:
我正在尝试创建一个非常简单的区块链用于教学目的。 每个块包含各种简单变量和结构变量。 区块链是一个简单的区块数组。
#define BLOCKCHAIN_MAX_SIZE 1000
struct transaction{
struct sockaddr_in sender_ip_port;
int quantity;
struct sockaddr_in receiver_ip_port;
int randomNumber;
};
struct block {
int index;
long timestamp;
struct transaction transaction;
int waitTime;
};
int main(int argc, char *argv[]) {
struct block **blockchain = malloc(sizeof(struct block *) * BLOCKCHAIN_MAX_SIZE);
blockchain[0]=malloc(sizeof(struct block));
blockchain[0]->index = 0;
blockchain[0]->waitTime= 0;
blockchain[0]->timestamp = 1549035455;
blockchain[0]->transaction.quantity= 0;
blockchain[0]->transaction.randomNumber= 0;
struct block *newBlock= (struct block *)malloc(sizeof(struct block));
//Fill up the new block with data
blockchain[1]=malloc(sizeof(struct block));
blockchain[1] = newBlock;
}
这对吗?
非常感谢
【问题讨论】:
-
嗯,不。这是不正确的。
blockchain[1]=malloc ...分配内存,然后blockchain[1] = newBlock丢弃该内存,造成内存泄漏。顺便说一句,强制转换malloc的结果是不必要的,而且往往会适得其反。
标签: c pointers struct declaration