C ++指向数组和for循环的指针;

时间:2012-04-26 17:06:15

标签: c++ arrays pointers

我对C ++很陌生,对这段代码有点问题。我想在每个应该使用动态内存分配创建的数组单元格中放置1。我相信几个月前我用malloc制作了类似的东西。当我打印出结果(g ++ Linux)时,它表明只有第一列(当我们将每个第十个单元格作为新列的开头处理时)填充了一列。其他人被打印成记忆的地址。

#include "stdafx.h"
#include <iostream>

class TestOfForVector {
public:
double* tabX;
double* tabY;
int n;
TestOfForVector(int getN){
    n = getN;
    tabY = new double[n*n];
    //tabX = new double[n];
    for(int i = 0; i < n; i ++ ){
        for(int j = 0; j <n; j++){
        tabY[j+i*n] = 1.0;
        std::cout<<tabY[j+i*n]<<std::endl;
        }
    }
}


~TestOfForVector(){
    delete [] tabX;
    delete [] tabY;
}
};


int main(int argc, _TCHAR* argv[])
{   
TestOfForVector newboy(10); //it will be defined by user input;
return 0;
}

对不起,可能是微不足道的问题,但我在互联网上找不到答案。 最好的祝福, 卢卡斯!

2 个答案:

答案 0 :(得分:2)

您的代码是正确的,并且(在您注释掉创建代码后注释掉delete[] tabX之后)它会运行并在我的计算机上生成一列。

我不知道stdafx.h标题应该是什么 - main的正常签名是(int argc, char** argv)。因此,我在使用g++进行编译之前删除了该标头。你说你在Linux上,所以使用Visual Studio的东西看起来很奇怪,不是吗?

答案 1 :(得分:0)

您在析构函数中遇到了未定义的行为:

delete [] tabX;

因为指针tabX悬空,因为它未初始化。

除此之外,你的代码很好,虽然stdafx.h是在Win下使用的预编译头文件,而_TCHAR是一个广泛字符的MSVS定义,你说你正在Linux下编译。 / p>