【发布时间】:2017-03-10 06:20:28
【问题描述】:
我有一个程序需要使用一个大数组(700,000 个元素)。我尝试按照普通数组分配它:
byte array1[700000] = {0xE8, 0x39, 0xF4, 0xB7, 0x69, ~~699995 other values~~ };
但是,我遇到了分段错误。经过一番研究,有人建议我把它放在堆上。所以,我做到了:
byte* array1 = (byte*) malloc(700000 * sizeof(byte) /* Just to be safe */);
我以前使用过指针,通常我会使用循环来处理它。但是,在这种情况下,所有值都已经存在。我如何将所有这些都放在新的array1 中? 我无法使用外部文件(即我无法从 .txt 文件中读取)。
这不起作用(根据 Visual Studio 的初始化值太多):
byte* array1 = (byte*) malloc(700000 * sizeof(byte));
array1 = { ~~ 700k comma-separated values ~~ };
我打算如何使用它的示例:
#include <stdio.h>
int main(int argc, char* argv[]) {
byte big_array[700000] = {0xE8, 0x39, 0xF4, ~~699995 other values~~ };
some_function(big_array);
return 0;
}
【问题讨论】:
-
为什么不尝试保留您的第一个代码
byte array1[10000]=...但添加static以不将您的数组存储在堆栈中? -
向我们提供该程序的完整上下文,这将有助于我们为您提供帮助。此外,
malloc在 C 中使用;在 C++ 中始终使用new[]。 -
@qxz 正在处理它。
-
@J.Piquard 将其设为静态解决了问题。如果您将其发布为一个答案,我将很高兴接受它。
-
您需要修改这些值吗?还是它们是只读的?
标签: c++ arrays pointers segmentation-fault