小编Bla*_*ace的帖子

请问STL deque pop_front()会自动回收内存吗?

我有一个程序,我收集一些数据并暂时存储在双端队列中

    typedef vector<float> floatVector;
    ...
    floatVector * currRecord;
    deque<floatVector *> data;
    ...
    ...

    for (...)
    {
        ...
        currRecord = new floatVector(10); 
        data.push_back(currRecord);
    }
Run Code Online (Sandbox Code Playgroud)

后来,我想将数据保存到文件中

    while (data.size() > 0) 
    {
        for (int i=0; i < 10; i++) 
        {
            fprintf(fPtr, "%lf\t", data[0]->at(i) );
        }
    fprintf(fPtr,"\n");
    data.pop_front();
    }
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,这个程序会导致内存泄漏吗?我使用new运算符为每个currRecord向量分配内存.deque pop_front功能会自动回收内存吗?或者我需要放

    delete [] data[0]
Run Code Online (Sandbox Code Playgroud)

之前

    data.pop_front();
Run Code Online (Sandbox Code Playgroud)

?另外,如果data是向量而不是双端队列,那么一切都是一样的吗?谢谢!

c++ memory-leaks stl vector deque

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

在 C++ 中,为什么需要提及指针的类型?

在 C++ 中,需要提及指针的类型。例如,

int a = 5;
int * p = &a;
Run Code Online (Sandbox Code Playgroud)

这里,'int *' 中的'int' 是必要的。我发现的原因是它需要取消引用。(知道要读取的字节数及其解释)和指针算术。

但是,如果我写:-

int a = 5;
char * p = &a;
float * p2 = &a;
//etc
Run Code Online (Sandbox Code Playgroud)

显示错误,说明无法将 char*、float* 等指针分配给 int 变量。好的..,所以编译器知道我想要指针的变量类型。这与普通变量不同,在普通变量中,编译器并不确切知道我想要哪种类型。例如:-

int a = 5;
float b = 5;
double c = 5;
long d = 5;
char e = 5;
Run Code Online (Sandbox Code Playgroud)

所有这些都很好。我需要在这里写类型,因为编译器不知道我想要哪种类型,因为所有这些都可以工作。

但是,在指针的情况下,它知道我要为其声明指针的变量的确切类型。

即使我使用显式类型转换,我仍然以某种方式告诉我需要的指针类型,并且仍然必须指定正确的指针类型。

int a = 5;
char * b = (char*)&a;//This would work.
//However this,
int …
Run Code Online (Sandbox Code Playgroud)

c++ pointers dereference c++-concepts

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

C ++函数未捕获向量下标超出范围的执行

我试图在字符“:”上拆分一个字符串,然后查看索引 2 是否存在。我的分割字符串函数工作得很好,因为我已经使用它很长一段时间了,但是在尝试尝试{} catch()之后,它没有捕获执行,而是在我的屏幕上显示调试错误。

    std::vector<std::string> index = split_string(random_stringgg);

    std::cout << index[1] << std::endl;

    try {
        std::string test = index[2];   
    }
    catch (...) {
        std::cout << "error occured" << std::endl;
        return false;
    }
    std::cout << "no error";
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该尝试找到向量“索引”的第二个索引,然后捕获执行(如果没有/无法找到它)。然而,这对我不起作用,即使在添加 try/catch 之后,它也会抛出“向量下标超出范围”。我的问题是为什么它没有捕获并仍然显示错误?

c++ exception outofrangeexception c++14

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

值错误:解压缩的值太多(预期3)

我试图实现值迭代算法.我有一个网格

grid = [[0, 0, 0, +1],
    [0, "W", 0, -1],
    [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

动作列表

actlist = {UP:1, DOWN:2, LEFT:3, RIGHT:4}
Run Code Online (Sandbox Code Playgroud)

还有奖励功能

reward = [[0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0,  0]] 
Run Code Online (Sandbox Code Playgroud)

我写了一个函数T,它返回3个元组的元组.

def T(i,j,actions):
if(i == 0 and j == 0):
    if(actions == UP):
        return (i,i,0.8),(i,i,0.1),(i,j+1,0.1)
    elif(actions == DOWN):
        return (i+1,j,0.8),(i,j,0.1),(i,j+1,0.1)
    elif(actions == LEFT):
        return (i,j,0.8),(i,j,0.1),(i+1,j,0.1)
    elif(actions == RIGHT):
        return (i,j+1,0.8),(i,i,0.1),(i+1,j,0.1)
elif (i == 0 and j == 1):
    if(actions == UP):
        return (i,i,0.8),(i,j-1,0.1),(i,j+1,0.1) …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence tuples python-3.x valueerror

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

主{}括号上的语法错误,"期望的时间"?

我完全难过了.无论我做什么,我的编译器都认为我需要在上一次printf中使用while循环?它只是一直在寻找没有意义的事情.当我将它们添加到其中时只是告诉我它不应该存在,当我删除它时我被告知我需要它.

int main() {
float userInput; //The grades that the user inputs.
int passingGrade = 0; //Number of passing grades
int failingGrade = 0; //Failing grades
int invalidGrade = 0; //Invalid grades

//This do for loop is simply counting the number of grades of each catagory posted.
do {
    printf("Enter a grade (Enter -1 to quit):");
    scanf("%f", &userInput);
    printf("You entered: %.1f\n", userInput);
    if ((userInput > 100) || (userInput < 0)) { //Over 100 is impossible.
        invalidGrade = invalidGrade + 1; …
Run Code Online (Sandbox Code Playgroud)

c printf while-loop do-while

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

有没有办法在 C++ 中声明另一个变量大小的变量?

我真的需要在我的代码中做这样的事情: char str[var+1]; 但我知道你只能在 [] 之间放一个常数。所以我只是问是否有任何方法可以做我需要的。

c++ size

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

C++ 指针允许这样做吗?

我正在学习 C++,我发现指针有点令人困惑。是否允许或者是否可以使用指针变量修改变量 int a ?

这是代码:

#include <iostream>
int main(){
    int a ; // int variable 
    int *p ; // pointer 


    a = 10 ;
    *p =15 ; 

    std:: cout << a ;
    return 0; 
};
Run Code Online (Sandbox Code Playgroud)

*p = 15 会改变 a 的值吗?
当我尝试运行代码时出现错误:

zsh: bus error 
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

错误C2976:'std :: tr1 :: array':MS C++ express 2010中的模板参数太少

我正在使用C++ Express 2010中的Windows窗体项目.对Form.h进行了一些更改,现在编译程序时出现错误.注意编译器显示错误是在主程序- open gl test 2-即#includes形式.在我开发代码时,所有编译好了好几天,然后昨晚改变了一些东西,现在我得到了错误.

open gl test 2中的主程序与我创建的任何其他基于表单的项目相同 - 我比较检查[除了命名空间的明显变化等导致其不同的项目]

// open gl test 2.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace opengltest2;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Form1());
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

错误是:

1>open gl test 2.cpp(9): error C2976: 'std::tr1::array' : too few template arguments
1>          D:\Program Files …
Run Code Online (Sandbox Code Playgroud)

c++ c++-cli

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

基本C程序不显示任何内容

我的程序没有输出什么.我已经尝试过其他类似版本的解决方案,用于项目euler问题1.我不需要答案我只想知道他们为什么没有输出.在用gcc编译并执行文件之后,似乎冻结了没有输出.我必须ctrl-z来杀死程序.

    #include <stdio.h>

    /* Project Euler Problem 1 */

    int main()
    {
        int sum = 0;
        int i = 0;

        while (i <= 1000);
        {
            if (i % 3 == 0 || i % 5 == 0);
            {
                sum += i;
            }
            i++;
        }
        printf("%d\n", sum);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c

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