【问题标题】:How do I assign existing array values into an array pointer?如何将现有数组值分配给数组指针?
【发布时间】: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


【解决方案1】:

如果您能够使用 C++11 编译器,则应使用 std::vector

std::vector<byte> array1 = {0xE8, 0x39, 0xF4, 0xB7, 0x69, ~~9995 other values~~ };

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2021-11-29
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多