我最近发现,当我在一个类中有指针时,我需要指定一个Copy构造函数.
为了解这一点,我做了以下简单的代码.它编译,但在执行复制构造函数时给出了运行时错误.
我试图只复制复制对象的指针中的值,但避免分配相同的地址.
那么,这里有什么问题?
class TRY{
public:
TRY();
~TRY();
TRY(TRY const &);
int *pointer;
void setPointer(int);
};
void TRY::setPointer(int a){
*pointer = a;
return;
}
TRY::TRY(){}
TRY::~TRY(){}
TRY::TRY(TRY const & copyTRY){
int a = *copyTRY.pointer;
*pointer = a;
}
int main(){
TRY a;
a.setPointer(5);
TRY b = a;
b.setPointer(8);
cout << "Address of object a = " << &a << endl;
cout << "Address of object b = " << &b << endl;
cout << "Address of a.pointer = " …Run Code Online (Sandbox Code Playgroud) 我想用C++读取一个输入文件,其结构(或缺少)就像一系列带有text = number的行,如
input1 = 10
input2 = 4
set1 = 1.2
set2 = 1.e3
Run Code Online (Sandbox Code Playgroud)
我想把这个号码拿出来,把剩下的就扔掉.数字可以是整数或双数,但我知道它们是一个还是其他.
我也想读它
input1 = 10
input2=4
set1 =1.2
set2= 1.e3
Run Code Online (Sandbox Code Playgroud)
以便对用户更加健壮.我认为这意味着它不应该是格式化的红色.
无论如何,有一种聪明的方法吗?
我已经尝试了以下内容,但对我一直在做的事情知之甚少,结果如预期的那样......没有成功.
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <boost/lexical_cast.hpp>
#include <string>
using namespace std;
using namespace boost;
int main(){
string tmp;
char temp[100];
int i,j,k;
ifstream InFile("input.dat");
//strtol
InFile.getline(temp,100);
k=strtol(temp,0,10);
cout << k << endl;
//lexical_cast
InFile.getline(temp,100);
j = lexical_cast<int>(temp);
cout …Run Code Online (Sandbox Code Playgroud) Hy all,
我相信下面这段代码会产生内存泄漏?
/* External function to dynamically allocate a vector */
template <class T>
T *dvector(int n){
T *v;
v = (T *)malloc(n*sizeof(T));
return v;
}
/* Function that calls DVECTOR and, after computation, frees it */
void DiscontinuousGalerkin_Domain::computeFaceInviscidFluxes(){
int e,f,n,p;
double *Left_Conserved;
Left_Conserved = dvector<double>(NumberOfProperties);
//do stuff with Left_Conserved
//
free(Left_Conserved);
return;
}
Run Code Online (Sandbox Code Playgroud)
我认为,通过将指针传递给DVECTOR,它将分配它并返回正确的地址,以便free(Left_Conserved)成功解除分配.但是,似乎并非如此.
注意:我也测试过new/delete替换malloc/free也没有成功.
我有一个用于分配二维数组的类似代码.我决定管理这样的矢量/数组,因为我经常使用它们,而且我也想了解使用C++进行更深入的内存管理.
所以,我非常希望保留一个外部函数来为我分配向量和数组.这里有什么能避免内存泄漏的问题?
编辑
我一直在使用DVECTOR函数来分配用户定义的类型,所以这可能是一个问题,我想,因为我没有调用构造函数.
即使在我释放Left_Conserved向量之前的代码段中,我也想分配一个向量并将其保持为"open"以通过其指针通过其他函数进行评估.如果使用BOOST,它会在函数结束时自动清除分配,所以,我不会得到一个带有BOOST的"公共"数组,对吗?我想用NEW很容易解决这个问题,但对于矩阵来说,更好的方法是什么?
我刚刚发现我将指针作为参数传递给其他函数.现在,BOOST似乎没有那么多享受它,并且编译以错误退出.
因此,我需要一个指向矢量或矩阵的指针,它接受用户定义的类型,它们将作为参数传递给其他函数.矢量(或矩阵)很可能在外部函数中分配,并在另一个合适的函数中释放.(我只是不想复制循环和新的东西,在代码中的任何地方分配矩阵!)
这是我想做的事情:
template <class T>
T **dmatrix(int m, int n){ …Run Code Online (Sandbox Code Playgroud)