C++;访问类内的浮点指针->;访问冲突 Visual C++,微软Visual Studio 2010 Express:

C++;访问类内的浮点指针->;访问冲突 Visual C++,微软Visual Studio 2010 Express:,c++,class,access-violation,C++,Class,Access Violation,从这个malloc站点访问: float* block = (float *)_aligned_malloc(32 * sizeof(float), CACHE_ALIGNMENT); block[0] = (float)30; // I work fine. 但是当它在这个类中时,它就不起作用了: class Test { private: //static const int numberOfElements = 1024; public:

从这个malloc站点访问:

float* block  = (float *)_aligned_malloc(32 * sizeof(float), CACHE_ALIGNMENT);
block[0] = (float)30;  // I work fine.

但是当它在这个类中时,它就不起作用了:

class Test
{
    private:
        //static const int numberOfElements = 1024;

    public:
        float* block1;
        float* block2;

    // Constructor
        Test::Test(int nElements)
        {
            float* block1 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
            float* block2 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
        }
    // Destructor
        Test::~Test(void) 
        {
            _aligned_free(block1);
            _aligned_free(block2);
        }
};

...

Test testClass = Test(32); 
testClass.block1[0] = (float)30;  // Access violation!

...
或者,如果声明为指针,同样的事情(这是我第一次尝试的方式):



当float*在类中定义时,在访问值方面我做错了什么?这个问题是其他问题吗?

您分配给构造函数的本地变量,而不是成员变量。试试像这样的东西

    Test::Test(int nElements)
    {
        block1 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
        block2 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
    }

并检查值以确保分配成功。

您分配给构造函数的本地变量,而不是成员变量。试试像这样的东西

    Test::Test(int nElements)
    {
        block1 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
        block2 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
    }

并检查值以确保分配成功。

构造函数本地变量
block1
block2
的声明将成员变量
block1
block2
隐藏起来


使用
g++
可以通过
-Wshadow
选项获得警告。在Visual Studio中,恐怕没有选项在变量遮挡另一个变量时发出警告。

构造函数本地的变量
block1
block2
声明遮挡了成员变量
block1
block2


使用
g++
可以通过
-Wshadow
选项获得警告。在Visual Studio中,我恐怕没有选项在一个变量遮挡另一个变量时发出警告。

看在上帝的份上,使用
std::vector
而不是
float*
@sad_man,不确定上帝是否关心眼前的问题。如果你真的必须自己管理内存,请始终记住。虽然这只是这里的一个错误。看在上帝的份上,用
std::vector
而不是
float*
@sad_-man,不确定上帝是否关心眼前的问题。如果你真的必须自己管理内存,一定要记住。虽然这只是这里的一个错误。@Plasmah true,但应该有一个关于隐藏成员的警告。或更广泛的警告(取决于编译器)“set但未使用变量”@Plasmah,两者都适用。是的,您是正确的。我以前修复过这个,但由于某种原因,现在错过了它。谢谢。@Plasmah true,应该有一个关于隐藏成员的警告。或者更广泛的警告(取决于编译器)“设置但未使用变量”@Plasmah,两者都适用。是的,您是正确的。我以前修复过这个,但由于某种原因,现在错过了它。谢谢。是的,你也是正确的,我没有设置警告级别4(未使用变量的警告)。谢谢。是的,你也是正确的,我没有设置警告级别4(未使用变量的警告)。非常感谢。