我目前停留在运行时生成随机数.在Java中,我只是调用Math.random()而且我已经完成了(我只需要一个简单的RNG).在C++中,我已经尝试了几种方法来生成随机数,并且总是得到相同的结果.
目前,我使用以下方法获取MIN和MAX之间的随机数:
unsigned int getRandomNumber(int min, int max){
std::mt19937 mt(1729);
std::uniform_int_distribution<int> dist(min, max);
return dist(mt);
}
Run Code Online (Sandbox Code Playgroud)
我有一个对象,在其构造函数中调用此函数,并将返回的值赋给属性.我目前创建此对象的五个实例,随机数始终相同.设置大范围(1 - 1000)不会改变这一点.数字总是一样的.安全性不是问题,它是一个非常简单的应用程序.
我有一个地图,使用字符串作为键和自定义对象的指针作为值.在运行时,用户可以创建自动添加到地图的此对象(指针)的实例.我使用DrMemory来查看是否有任何泄漏(例如内存泄漏).
所以我测试了应用程序而没有手动删除包含地图的指针,也没有发现错误(因此也没有发生内存泄漏).为了安全起见,我还使用一种方法进行测试,该方法在退出程序时被调用,该方法遍历地图并手动删除每个指针.
当我现在对它进行测试时,我得到了几个相同类型的错误:
无法获得释放的记忆......
出现的行指向清理方法的位置.
我现在的问题是:我应该保持对清理方法的调用(因此只是忽略错误),还是应该删除它并保留它,因为它知道没有必要手动删除指针?
我正在删除指针并从地图中删除条目
void cleanUp(std::map <string, Car*>* map){
for(auto const& x : *map){
delete x.second;
map->erase(x.first);
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个读取数字并将其添加到链接列表的程序.
我遇到的问题是指向我的struct的指针永远不会为null,因此我不能使用if-conditions而不会遇到某种错误(SIGSEGV).
在main方法中,我创建了一个名为"head"的struct node指针:
struct node* head;
Run Code Online (Sandbox Code Playgroud)
在函数push中,我会检查head是否为null - 如果是,则表示它是未初始化的.我用正常的if条件检查了这个:
if(head == null){
//Code
}
Run Code Online (Sandbox Code Playgroud)
这从来没有奏效,if条件总是被忽略.为了解决这个问题,我引入了一个initFlag(如下面的push(...)所示),以确保在再次调用push之前用头部初始化列表(从而附加一个数字).这很有效,第一个数字已经成功推出.然而,现在,我再次遇到if-condition的问题,因此再次运行到SIGSEGV中.这里抛出错误:
while(current->next != NULL){
current = current->next;
}
Run Code Online (Sandbox Code Playgroud)
这是代码:
struct node{
int value;
struct node *next;
};
void push(int value, struct node* head, bool *initFlag){
if(!(*(initFlag))){
head = (struct node*) malloc(sizeof(struct node));
head->value=value;
head->next = NULL;
*initFlag = 1;
} else{
struct node* current = head;
while(current->next != NULL){
current = current->next;
}
current->next = (struct node*) malloc(sizeof(struct node));
current->next->value = value;
current->next->next = NULL; …Run Code Online (Sandbox Code Playgroud)