C++ 字符指针分段数组
如果因子很小,下面的代码可以正常工作,但当它变大时,我会遇到一个分段错误。我遇到的第一个实例大小约为800.000。 这应该可以很容易地记在记忆中,或者我遗漏了什么? 谢谢你的帮助C++ 字符指针分段数组,c++,C++,如果因子很小,下面的代码可以正常工作,但当它变大时,我会遇到一个分段错误。我遇到的第一个实例大小约为800.000。 这应该可以很容易地记在记忆中,或者我遗漏了什么? 谢谢你的帮助 char *fgs_arr [facs().size()], *true_arr[facs().size()], *maps_arr[facs().size()]; 您正在耗尽堆栈(本地声明内存所在的位置)。您需要动态声明它(这将进入更大的堆)或增加堆栈大小。您的堆栈(本地声
char *fgs_arr [facs().size()],
*true_arr[facs().size()],
*maps_arr[facs().size()];
您正在耗尽堆栈(本地声明内存所在的位置)。您需要动态声明它(这将进入更大的堆)或增加堆栈大小。您的堆栈(本地声明的内存所在的位置)即将用完。您需要动态声明它(这将进入更大的堆)或增加堆栈大小。由于vla位于堆栈上,并且堆栈(在大多数情况下)为1MB,因此它不应轻松装入内存。改用malloc(别忘了释放)。因为vla在堆栈上,而且堆栈(大多数情况下)为1MB,所以它不应该很容易放入内存。改用malloc(别忘了释放)。正如您所发现的,您的堆栈空间已经用完了。切换到
新的是不雅观的;它会导致内存泄漏和其他错误。尝试std::vector
:
std::vector fgs_arr(facs().size());
标准:向量真值(facs().size());
std::向量映射(facs().size());
正如您所发现的,您的堆栈空间正在耗尽。切换到新的是不雅观的;它会导致内存泄漏和其他错误。尝试std::vector
:
std::vector fgs_arr(facs().size());
标准:向量真值(facs().size());
std::向量映射(facs().size());
也许我遗漏了什么:facs().size()
对我来说似乎不是有效的C语法。你可能想提供更多关于你在什么环境下开发的信息。你确定segfault发生在这里而不是其他地方吗?@AleksG它可能是另一种语言,但即使在C中,如果facs
返回具有成员int(*size)(
)的结构,则它是有效的。是的,我想它是:)可能我缺少了什么:facs().size()
在我看来似乎不是有效的C语法。您可能想提供有关您在哪个环境中开发的更多信息。您确定segfault发生在这里而不是其他地方吗?@AleksG它可能是另一种语言,但即使在C中,如果facs
返回具有成员int(*size)(
)的结构,它也是有效的。是的,我想是:)我相信动态声明的内存在堆栈上。谢谢,实际上我需要的是:char**fgs_arr=new char*[facs().size()]我相信动态声明的内存会放在堆栈上。不。谢谢,实际上我需要的是:char**fgs_arr=new char*[facs().size()]
std::vector<char*> fgs_arr(facs().size());
std::vector<char*> true_arr(facs().size());
std::vector<char*> maps_arr(facs().size());