小编NL3*_*NL3的帖子

C++随机数始终相同

我目前停留在运行时生成随机数.在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)不会改变这一点.数字总是一样的.安全性不是问题,它是一个非常简单的应用程序.

c++ random

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

带有指针的C++映射,在退出时自动释放,如何处理删除

我有一个地图,使用字符串作为键和自定义对象的指针作为值.在运行时,用户可以创建自动添加到地图的此对象(指针)的实例.我使用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)

c++ dictionary pointers

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

C/C++链表永远不会为空

我目前正在开发一个读取数字并将其添加到链接列表的程序.

我遇到的问题是指向我的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)

c c++ pointers list

-2
推荐指数
1
解决办法
418
查看次数

标签 统计

c++ ×3

pointers ×2

c ×1

dictionary ×1

list ×1

random ×1