我有一个程序,我收集一些数据并暂时存储在双端队列中
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++ 中,需要提及指针的类型。例如,
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) 我试图在字符“:”上拆分一个字符串,然后查看索引 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 之后,它也会抛出“向量下标超出范围”。我的问题是为什么它没有捕获并仍然显示错误?
我试图实现值迭代算法.我有一个网格
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) 我完全难过了.无论我做什么,我的编译器都认为我需要在上一次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) 我真的需要在我的代码中做这样的事情: char str[var+1]; 但我知道你只能在 [] 之间放一个常数。所以我只是问是否有任何方法可以做我需要的。
我正在学习 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++ 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) 我的程序没有输出什么.我已经尝试过其他类似版本的解决方案,用于项目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++ ×6
c ×2
pointers ×2
c++-cli ×1
c++-concepts ×1
c++14 ×1
deque ×1
dereference ×1
do-while ×1
exception ×1
memory-leaks ×1
printf ×1
python ×1
python-3.x ×1
size ×1
stl ×1
tuples ×1
valueerror ×1
vector ×1
while-loop ×1