c++ - 大小为 4 的数组写入无效

标签 c++ valgrind

<分区>

我正在用 C++ 创建一个 Vector 类,但遇到了一些问题。

==23391== Invalid write of size 4
==23391==    at 0x401CAB: IntVector::IntVector(int, int) (IntVector.cpp:35)
==23391==    by 0x401009: main (main.cpp:36)
==23391==  Address 0x4c25218 is 0 bytes after a block of size 200 alloc'd
==23391==    at 0x4A07152: operator new[](unsigned long) (vg_replace_malloc.c:363)
==23391==    by 0x401C7F: IntVector::IntVector(int, int) (IntVector.cpp:32)
==23391==    by 0x401009: main (main.cpp:36)



IntVector::IntVector(int size, int value){
capacity = INITIAL_CAPACITY;
while(size >= capacity)
{
    capacity = capacity*2;
}
if(size < 0)
{
    count = 0;
    array = new int[capacity];
}
else
{
    count = size;
    array = new int[capacity];  // line 32
    for(int i = 0; i < count; i++)
        {
            array[i] = value; //line 36
        }
}

为什么我可以读取或写入数组?在 main 中,我声明了 v1(5,0)initial capacity = 50 并且循环只转到 4,所以它不可能读取或写入超过 50!

最佳答案

不应该

array = new int[50]; // line 32

是这个吗?

array = new int[capacity];

关于c++ - 大小为 4 的数组写入无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21309839/

相关文章:

c++ - 从 utsname 中找出 Linux 操作系统名称

c++ - C++ 中的加权 RNG 速度问题

c - 我什么时候释放变量decodeSet1?

c - Valgrind 中未初始化字节错误

java - 如何用 Java 表示这个

Xcode 6.1/LLVM 6.0 的 C++ URDL 编译错误

c++ - cmake 无法检测到 boost 多重安装

c - valgrind 误解公会

c - Valgrind 错误、大小读取无效和条件跳转或移动取决于未初始化的值

c - 需要帮助了解 valgrind 输出