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

C++ pointer to array and for loop;

本文关键字:循环 指针 for 数组 C++      更新时间:2023-10-16

我对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;
}

很抱歉可能是微不足道的问题,但我在互联网上找不到答案。此致敬意卢卡斯!

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

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

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

delete [] tabX;

因为指针tabX悬而未决,因为它没有初始化。

除此之外,你的代码很好,尽管stdafx.h是在Win下使用的预编译头文件,_TCHAR是MSVS定义的宽字符,你说你是在Linux下编译的。