C++;指向数组和for循环的指针; 我对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; } #包括“stdafx.h” #包括 类TestOffForVector{ 公众: 双*tabX; 双*塔比; int n; TestOffForVector(int getN){ n=getN; tabY=新的双精度[n*n]; //tabX=新的双精度[n]; 对于(int i=0;i

C++;指向数组和for循环的指针; 我对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; } #包括“stdafx.h” #包括 类TestOffForVector{ 公众: 双*tabX; 双*塔比; int n; TestOffForVector(int getN){ n=getN; tabY=新的双精度[n*n]; //tabX=新的双精度[n]; 对于(int i=0;i,c++,arrays,pointers,C++,Arrays,Pointers,您的代码是正确的,并且(在注释掉您的delete[]tabX之后,因为您注释掉了创建代码),它在我的机器上运行并生成一列 我不知道stdafx.h头应该是什么-main的正常签名是(int argc,char**argv)。因此,在使用g++编译之前,我删除了该标题。您说您在Linux上,所以使用Visual Studio似乎有些奇怪,不是吗?您在析构函数中遇到了未定义的行为: delete [] tabX; 因为指针tabX由于未初始化而悬空 除此之外,您的代码很好,尽管stdafx.h是W

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


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

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

delete [] tabX;
因为指针
tabX
由于未初始化而悬空


除此之外,您的代码很好,尽管
stdafx.h
是Win下使用的预编译头文件,
\u TCHAR
是MSV对宽字符的定义,您说您是在Linux下编译的。

使用#include and Use std::vector而不是数组。我无法重现您的结果:--您确定这是您正在使用的同一代码吗跑步