小编Big*_*iga的帖子

使用指针复制构造函数

我最近发现,当我在一个类中有指针时,我需要指定一个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++ pointers copy-constructor

15
推荐指数
2
解决办法
6万
查看次数

读取输入文件的各个部分

我想用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)

c++ file-io parsing

2
推荐指数
2
解决办法
8636
查看次数

内存分配的专用功能会导致内存泄漏吗?

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)

c++ memory-leaks

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