繁体   English   中英

从数组复制字节时出现运行时错误

[英]Runtime error when copying bytes from array

我正在尝试复制数组。 我知道这是“错误的代码”,但是我从大量使用此代码和其他低级内容的教程中得到了它。 由于某种原因,我遇到了运行时错误,我无法知道它来自何处或原因。 有人可以帮忙吗? 谢谢。

#include <iostream>

void copy_array(void *a, void const *b, std::size_t size, int amount)
{
    std::size_t bytes = size * amount;
    for (int i = 0; i < bytes; ++i)
        reinterpret_cast<char *>(a)[i] = static_cast<char const *>(b)[i];
}

int main()
{
    int a[10], b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    copy_array(a, b, sizeof(b), 10);

    for (int i = 0; i < 10; ++i)
        std::cout << a[i] << ' ';
}

表达式sizeof(b)返回以字节为单位的数组大小,而不是数组中元素的数目。 这将导致复制功能覆盖堆栈帧,从而导致运行时错误。 使用sizeof(b[0])代替获取单个元素的大小。 如果要检索数组中的元素数,可以像这样使用两者的组合。

copy_array(a, b, sizeof(b[0]), sizeof(b) / sizeof(b[0]));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM