0

我对 C++ 很陌生,并且对那段代码有一点问题。我想在应该使用动态内存分配创建的数组的每个单元格中放入 1。我相信几个月前我用 malloc 在 c 中做了类似的事情。当我打印出结果(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;
}

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

4

2 回答 2

2

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

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

于 2012-04-26T17:10:52.917 回答
0

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

delete [] tabX;

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

除此之外,您的代码很好,虽然stdafx.h是在 Win 下使用的预编译头文件,并且_TCHAR是为宽字符定义的 MSVS,并且您说您正在 Linux 下编译。

于 2012-04-26T18:09:49.370 回答