0

我希望构造函数创建一个动态数组并将传递给构造函数的参数分配给数组的成员。

我在标题中的简化版本:

//in classes.h
#ifndef classes_h
#define classes_h
#include <iostream>
class Base{
        int a,*var;
public:
    Base();
    Base(int);
    ~Base();
    int func(int);
};
#endif

在 *.cpp 中:

//In classes.cpp
#incldue "classes.h"
Base::Base(int a){
    var=new int[2];
    var[0]=a;
    var[1]=func(a);
}
Base::~Base(){
        delete var;
}
int Base::func(int b){
    return b++;
}
int main(){
Base obj(1);
return 0;}

我需要能够将该数组传递给一个函数,该函数将以某种方式对其进行修改,但实际上我在定义数组时遇到了更多麻烦......

我没有从编译器或链接器中得到任何错误,但是通过调试我得出的结论是,问题在于数组的创建。

我复习了指针、动态数组和类的基础知识 3 次(或者更多次),但无济于事。我希望我正在尝试做的事情实际上是可能的。如果不是,最接近的东西是什么?

4

3 回答 3

1

由于以下原因,您遇到了未定义的行为

var=new int[2];

被释放

delete var;

而不是delete[] var;.

你应该使用 astd::vector<int>代替。这样,您就不必担心析构函数/复制构造函数/赋值运算符。

另外,请注意

int Base::func(int b){
    return b++;
}

基本上是一个空操作,因为b返回了之前的值。你的意思是return b+1

于 2012-11-01T06:47:50.227 回答
1

你有两个问题:

  1. 你没有遵循三法则
  2. 你有一个未定义的行为

细节:

delete var;

应该:

delete []var;

newrequiresdeletenew[]requires delete [],错误连接会导致未定义的行为。

建议:

您应该使用std::vectororstd::array代替动态 c 样式数组。它将为您节省所有的努力,并且它们更不容易出错。

于 2012-11-01T06:47:57.680 回答
0

如果你不喜欢这个例子中的向量,你可以使用 std::pair 但向量是要走的路。我已经好几个月没有使用数组了。

于 2012-11-01T09:39:41.123 回答