C++;访问类内的浮点指针->;访问冲突 Visual C++,微软Visual Studio 2010 Express:
从这个malloc站点访问: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:
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(未使用变量的警告)。非常感谢。