首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我在动态数组(C++)中使用一个变量时,它似乎正在被解除引用

当我在动态数组(C++)中使用一个变量时,它似乎正在被解除引用
EN

Stack Overflow用户
提问于 2011-01-15 00:01:06
回答 4查看 109关注 0票数 1

在这里,我们又一次成为了互联网的好人。

这是我使用的代码:

代码语言:javascript
复制
//This is what is in the header file
int *myArr[]; // A two-dimensional array representing holding the matrix data

//This is what is in the definition file
Matrix::Matrix(int n, int m)
{
    myRows = n;
    myColumns = m;
    initialize();
}

void Matrix::initialize()
{
    *myArr = new int[myRows];

    for (int i=0; i < 3; i++)//Only set to 3 since myRows is acting crazy
    {
        myArr[i] = new int[myColumns];
    }
}

由于某些原因,当我使用myRows变量创建myArr数组时,它似乎停止引用它之前指向的值。

例如,我给它赋值3,在执行*myArr = intmyRows之后,它将myRows的值更改为9834496,这是我不明白的。

"new“是否取消了对变量的引用?还是我做错了什么?

哦,因为这是一个学校实践项目(所以如果你不回答,我不会责怪你),我更喜欢答案而不是工作代码,这样我就可以知道我在未来的项目中做错了什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-15 00:06:27

代码语言:javascript
复制
int *myArr[];

这是错误的!你必须告诉编译器你的指针数组的大小。如果你声明为int a[]会怎么样?您告诉编译器创建一个大小未知的整数数组,这在C++中是不允许的。这就是为什么你不能这样做的原因。

我建议你这样做:

代码语言:javascript
复制
int **myArr;

void Matrix::initialize()
{
    myArr = new int*[myRows]; //note int* here!

    for (int i=0; i < myRows; i++)
    {
        myArr[i] = new int[myColumns];
    }
}

这现在应该可以用了。

票数 2
EN

Stack Overflow用户

发布于 2011-01-15 00:07:56

您应该使用std::vector<>。它处理内存分配和释放的所有问题。而且它没有任何bug。

然后你专注于你的算法的真正目标。不在内存管理上:-)

代码语言:javascript
复制
typedef std::vector<int> Ints;
typedef std::vector<Ints> Matrix;
Matrix myArray;
票数 2
EN

Stack Overflow用户

发布于 2011-01-15 00:08:59

尝试替换:

代码语言:javascript
复制
*myArr = new int[myRows];

通过

代码语言:javascript
复制
myArr = new int*[myRows];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4693014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档