首页 > 解决方案 > 如何使函数在没有段错误的情况下访问单词值

问题描述

代码编译时没有警告和错误,但出现分段错误。当我调用函数以在 4096 字节块中为他人添加价值时。如何消除此错误并使功能正确?

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

void addn_u16(unsigned short* _dataEnd, unsigned short* _data, unsigned short val)
{
    while (_data < _dataEnd)
    {
        unsigned short dat = *_data + val;
        *_data = dat;
        _data++;
    }
}

int main()
{
    clock_t begin = clock();

    unsigned short* block = malloc(4096);

    addn_u16(block + 4096, block, 645);

    clock_t ms = clock() - begin;

    printf("ms: %u", ms);
    
    return 0;
}

标签: c

解决方案


在 malloc 调用中,您分配了 4096 个字节,您应该传递4096 * sizeof(unsigned short)给 malloc()

编辑:您在评论中说您打算分配 2048 条短裤。然后你应该传递block + 2048addn_u16,因为block + 4096实际上会添加一个等于 4096 * sizeof(short) 的偏移量:就是指针的算术工作原理


推荐阅读