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 *时,在访问值时我做错了什么?问题还有别的吗?
答案 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)
构造函数本地变量block1
和block2
的声明会影响成员变量block1
和block2
。
使用g++
您可以使用-Wshadow
选项收到警告。使用Visual Studio,我担心当变量影响另一个变量时,没有选项可以发出警告。