小小利维坦 2022-05-08 12:45
浏览 228
已结题

关于动态数组报错c6386

动态数组进行插入查找时出现 Warning C6386 Buffer overrun while writing to 'array->pAddr'.

但是结果没有影响

typedef struct DynamicArray
{
    void** pAddr;
    int m_capacity;
    int m_size;

}DynamicArray;
//初始化数组
DynamicArray* init_array(int capacity)
{
    if (capacity == 0)
    {
        return NULL;
    }
    DynamicArray* array = (DynamicArray*)malloc(sizeof(DynamicArray));
    if (array == 0)
    {
        return NULL;
    }
    array->pAddr = (void**)malloc(sizeof(void*) * capacity);
    if (array->pAddr == NULL)
    {
        perror("init_array");
        return NULL;
    }
    array->m_size = 0;
    array->m_capacity = capacity;

    return array;
}
void insert_array(DynamicArray* array, int pos, void* data)
{
    if (array == NULL)
    {
        return;
    }
    if (data == NULL)
    {
        return;
    }
    //输入的位置大于现有的size
    if (pos > array->m_size)
    {
        pos = array->m_size;
    }
    //无效位置  尾插
    if (pos < 0 || pos > array->m_size)
    {
        pos = array->m_size;
    }
    //如果内存不够扩容
    if (array->m_size == array->m_capacity)
    {
        //1 计算新空间大小
        int newCapacity = array->m_capacity * 2;

        //2 创建新空间
        void** newSpace = malloc(sizeof(void*) * newCapacity);

        if (newSpace == NULL)
        {
            return;
        }

        //3 将原有数据拷贝
        memcpy(newSpace, array->pAddr, sizeof(void*) * array->m_capacity);

        //4 释放原有内存空间
        free(array->pAddr);

        //5 更新空间指向
        array->pAddr = newSpace;

        //6 更新容量
        array->m_capacity = newCapacity;

    }

    for (int i = array->m_size - 1; i >= pos; i--)
    {
        //向后移动
        array->pAddr[i + 1] = array->pAddr[i];  //这行报错 c6836 buffer overn while writing "array->pAddr "
    }
    //插入指定位置
    array->pAddr[pos] = data;

    array->m_size++;

}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月16日
    • 创建了问题 5月8日

    悬赏问题

    • ¥15 verilog 非阻塞赋值下的移位拼接错误
    • ¥100 两个按钮控制一个LED
    • ¥15 用C语言写离散数学相关问题
    • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
    • ¥15 ansys机翼建模肋参数
    • ¥15 Sumo软件无法运行
    • ¥15 如何在vscode里搭建stata的编辑环境?
    • ¥15 dify知识库创建问题
    • ¥15 如何用C#的chart画1000万个点不卡顿
    • ¥15 爬虫技术找到网上看过房源客户的电话