我需要返回枚举阵列的方法的数组,我想:函数返回枚举
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
我上,这样我应该返回的第一个元素的地址读某处数组,所以这就是为什么有一个指针。这虽然给我一个警告:address of stack memory associated with local variable notes returned
如何摆脱警告并正确返回数组?
我需要返回枚举阵列的方法的数组,我想:函数返回枚举
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
我上,这样我应该返回的第一个元素的地址读某处数组,所以这就是为什么有一个指针。这虽然给我一个警告:address of stack memory associated with local variable notes returned
如何摆脱警告并正确返回数组?
您不能从函数period中返回数组。你可以返回一个指向动态分配的内存块的指针(我不会去这条路径),或者把指针(和大小一起)作为输出参数,或者返回一个指向静态数组的指针,或者返回一个vector<T>
或其他收藏品。我想用std::vector
或std::array
。
std::vector<note_name> foo() {
std::vector<note_name> ret;
// populate 'ret'
return ret;
}
使用std::vector
,std::array
,其他一些收集或dynamic-array
(即使用new
,而不是分配堆栈),因为从职能范围的退出后您的阵列将一些垃圾被破坏,你将有指针,它指向记忆。我认为你知道enum
中有多少个值,如果你有C++ 11,你可以使用std::array
。
std::array<note_name> foo() {
std::array<note_name, size> ret = { ... }; // fill ret, instead of ...
return ret;
}
让我们来看看你写的:
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
阵列notes
是一个局部变量将在函数返回时自动清除。如果你返回一个指向它的指针,那么你将返回一个指向不存在的数组的指针。这就是编译器抱怨的原因。
如果数组的大小和内容在编译时已知,则声明数组为static const。然后你可以返回对数组的引用。语法是有点不可思议:
static const std::size_t note_names_size = 42;
note_name const (&AppSettings::getNoteMap())[note_names_size] {
static note_name const notes[note_names_size] = { ... };
return notes;
}
如果数组的大小在编译时已知的,但不是内容,使用一个std::array
。你可以声明一个局部变量,填入它,然后返回的值。
如果大小和阵列的内容不在编译时已知的(或者,如果你的库没有实现std::array
),使用std::vector
代替。
如果我想返回它,矢量是否也需要是静态的? – networkprofile
如果您按价值归还它,您应该这样做。 –
可能的重复[可以访问本地变量的内存超出其范围?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-范围) –