Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符指针分段数组_C++ - Fatal编程技术网

C++ 字符指针分段数组

C++ 字符指针分段数组,c++,C++,如果因子很小,下面的代码可以正常工作,但当它变大时,我会遇到一个分段错误。我遇到的第一个实例大小约为800.000。 这应该可以很容易地记在记忆中,或者我遗漏了什么? 谢谢你的帮助 char *fgs_arr [facs().size()], *true_arr[facs().size()], *maps_arr[facs().size()]; 您正在耗尽堆栈(本地声明内存所在的位置)。您需要动态声明它(这将进入更大的堆)或增加堆栈大小。您的堆栈(本地声

如果因子很小,下面的代码可以正常工作,但当它变大时,我会遇到一个分段错误。我遇到的第一个实例大小约为800.000。 这应该可以很容易地记在记忆中,或者我遗漏了什么? 谢谢你的帮助

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());