c - 如何使函数在没有段错误的情况下访问单词值
问题描述
代码编译时没有警告和错误,但出现分段错误。当我调用函数以在 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;
}
解决方案
在 malloc 调用中,您分配了 4096 个字节,您应该传递4096 * sizeof(unsigned short)
给 malloc()
编辑:您在评论中说您打算分配 2048 条短裤。然后你应该传递block + 2048
给addn_u16
,因为block + 4096
实际上会添加一个等于 4096 * sizeof(short) 的偏移量:这就是指针的算术工作原理
推荐阅读
- sql - 用sql代码计算最后一列余额
- regex - 使用 sed 可能/可能不会跨越多行的分隔符
- azure - 将多值/数组 GET 参数传递给 Azure Function 并在 CosmosDB 中使用
- sql - 一切的 DDL 触发器
- c++builder - 包含在 Embarcadero C++ Builder 中生成的 VCL 样式实用程序的 .hpp 文件时出错
- c# - 在 .Net Standard 2.0 中安装 Selenium C# WebDriver 时出现一般错误
- jms - 仅在 JPA 事务提交后才发送 JMS 消息
- c# - Internet Explorer 11 Last Session 和 ASP.Net WebForm App
- load-testing - Gatling:是否可以像用户一样升级单个场景?
- php - 使用 PHP 获取部分字符串