C ++访问类中的浮点指针 - >访问冲突

时间:2012-01-24 11:10:31

标签: c++ class access-violation

Visual C ++,Microsoft Visual Studio 2010 Express:

从这个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!

...

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

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

当在类中定义float *时,在访问值时我做错了什么?问题还有别的吗?

2 个答案:

答案 0 :(得分:4)

您为构造函数的本地变量赋值,而不是成员变量。尝试像

这样的东西
    Test::Test(int nElements)
    {
        block1 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
        block2 = (float *)_aligned_malloc(nElements * sizeof(float), CACHE_ALIGNMENT);
    }

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

答案 1 :(得分:0)

构造函数本地变量block1block2的声明会影响成员变量block1block2

使用g++您可以使用-Wshadow选项收到警告。使用Visual Studio,我担心当变量影响另一个变量时,没有选项可以发出警告。