网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月25日漏签0天
c语言吧 关注:798,853贴子:4,357,157
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 15回复贴,共1页
<<返回c语言吧
>0< 加载中...

编译scheme11.2时遇到的错误

  • 只看楼主
  • 收藏

  • 回复
  • 博丽灵梦
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
编译时显示编译器(gcc12.2.1)认为函数声明的参数列表和函数实现的参数列表中,uint_8 *和uint_8[64]不能对应,我自己把头文件的修改为uint_8 in[64]也还是错误。但是我自己的测试中编译器又认为这两个可以对应……
然后就是函数声明和实现的函数名不一样,编译器认为的源文件的函数chacha_core在头文件的原型是chacha12_core,我表示无法理解……




  • GTA小鸡
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
-Wno-error=array-parameter


2025-07-25 05:59:26
广告
不感兴趣
开通SVIP免广告
  • 草酱
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码不全看不清楚,是不是哪里有宏把chacha替换成了chacha12


  • 草酱
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
把chacha12改成chacha13看看会不会报错


  • 博丽灵梦
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* chacha.h 改成下面这样就不会报告上面的错误了*/
#ifndef CHACHA_H
#define CHACHA_H
#include <stdint.h>
#define chacha_core_OUTPUTBYTES 64
#define chacha_core_INPUTBYTES 16
#define chacha_core_KEYBYTES 32
#define chacha_core_CONSTBYTES 16
/*
void chacha8_core(uint8_t[chacha_core_OUTPUTBYTES],
const uint8_t[chacha_core_INPUTBYTES],
const uint8_t[chacha_core_KEYBYTES],
const uint8_t[chacha_core_CONSTBYTES]);
void chacha12_core(uint8_t[chacha_core_OUTPUTBYTES],
const uint8_t[chacha_core_INPUTBYTES],
const uint8_t[chacha_core_KEYBYTES],
const uint8_t[chacha_core_CONSTBYTES]);
void chacha20_core(uint8_t[chacha_core_OUTPUTBYTES],
const uint8_t[chacha_core_INPUTBYTES],
const uint8_t[chacha_core_KEYBYTES],
const uint8_t[chacha_core_CONSTBYTES]);
*/
void chacha8_core(uint8_t *out,
const uint8_t *in,
const uint8_t *k,
const uint8_t *c);
void chacha12_core(uint8_t *out,
const uint8_t *in,
const uint8_t *k,
const uint8_t *c);
void chacha20_core(uint8_t *out,
const uint8_t *in,
const uint8_t *k,
const uint8_t *c);
int chacha8_core_selftest(void);
int chacha12_core_selftest(void);
int chacha20_core_selftest(void);
#endif /* CHACHA_H */


  • 博丽灵梦
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* chacha.i 实现部分*/
#define _POSIX_C_SOURCE 200809L
#include "chacha.h"
#include <stdint.h>
static inline uint32_t
chacha_le32dec(const void *buf)
{
const uint8_t *p = buf;
uint32_t v = 0;
v |= (uint32_t)*p++ << 0;
v |= (uint32_t)*p++ << 8;
v |= (uint32_t)*p++ << 16;
v |= (uint32_t)*p++ << 24;
return v;
}
static inline void
chacha_le32enc(void *buf, uint32_t v)
{
uint8_t *p = buf;
*p++ = v & 0xff; v >>= 8;
*p++ = v & 0xff; v >>= 8;
*p++ = v & 0xff; v >>= 8;
*p++ = v & 0xff; v >>= 8;
}
static uint32_t
rol32(uint32_t u, unsigned c)
{
return (u << c) | (u >> (32 - c));
}
#define QUARTERROUND(a, b, c, d) do { \
(a) += (b); (d) ^= (a); (d) = rol32((d), 16); \
(c) += (d); (b) ^= (c); (b) = rol32((b), 12); \
(a) += (b); (d) ^= (a); (d) = rol32((d), 8); \
(c) += (d); (b) ^= (c); (b) = rol32((b), 7); \
} while (/*CONSTCOND*/0)
static const uint8_t chacha_core_constant32[16] = "expand 32-byte k";
void
chacha_core(uint8_t *out, const uint8_t *in, const uint8_t *k,
const uint8_t *c)
{
uint32_t x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15;
uint32_t j0,j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,j11,j12,j13,j14,j15;
int i;
j0 = x0 = chacha_le32dec(c + 0);
j1 = x1 = chacha_le32dec(c + 4);
j2 = x2 = chacha_le32dec(c + 8);
j3 = x3 = chacha_le32dec(c + 12);
j4 = x4 = chacha_le32dec(k + 0);
j5 = x5 = chacha_le32dec(k + 4);
j6 = x6 = chacha_le32dec(k + 8);
j7 = x7 = chacha_le32dec(k + 12);
j8 = x8 = chacha_le32dec(k + 16);
j9 = x9 = chacha_le32dec(k + 20);
j10 = x10 = chacha_le32dec(k + 24);
j11 = x11 = chacha_le32dec(k + 28);
j12 = x12 = chacha_le32dec(in + 0);
j13 = x13 = chacha_le32dec(in + 4);
j14 = x14 = chacha_le32dec(in + 8);
j15 = x15 = chacha_le32dec(in + 12);
for (i = chacha_core_ROUNDS; i > 0; i -= 2) {
QUARTERROUND( x0, x4, x8,x12);
QUARTERROUND( x1, x5, x9,x13);
QUARTERROUND( x2, x6,x10,x14);
QUARTERROUND( x3, x7,x11,x15);
QUARTERROUND( x0, x5,x10,x15);
QUARTERROUND( x1, x6,x11,x12);
QUARTERROUND( x2, x7, x8,x13);
QUARTERROUND( x3, x4, x9,x14);
}
chacha_le32enc(out + 0, x0 + j0);
chacha_le32enc(out + 4, x1 + j1);
chacha_le32enc(out + 8, x2 + j2);
chacha_le32enc(out + 12, x3 + j3);
chacha_le32enc(out + 16, x4 + j4);
chacha_le32enc(out + 20, x5 + j5);
chacha_le32enc(out + 24, x6 + j6);
chacha_le32enc(out + 28, x7 + j7);
chacha_le32enc(out + 32, x8 + j8);
chacha_le32enc(out + 36, x9 + j9);
chacha_le32enc(out + 40, x10 + j10);
chacha_le32enc(out + 44, x11 + j11);
chacha_le32enc(out + 48, x12 + j12);
chacha_le32enc(out + 52, x13 + j13);
chacha_le32enc(out + 56, x14 + j14);
chacha_le32enc(out + 60, x15 + j15);
}
int
chacha_core_selftest(void)
{
const uint8_t nonce[chacha_core_INPUTBYTES] = {0};
const uint8_t key[chacha_core_KEYBYTES] = {0};
uint8_t block[64];
unsigned i;
chacha_core(block, nonce, key, chacha_core_constant32);
for (i = 0; i < 64; i++) {
if (block[i] != chacha_core_selftest_vector[i])
return -1;
}
return 0;
}


  • 博丽灵梦
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* 新的报错 */
[xifu@DESKTOP-DJDGSEK src]$ make
(cd microcode && make all)
make[1]: 进入目录“/home/xifu/下载/mit-scheme-11.2/src/microcode”
gcc -DHAVE_CONFIG_H -DMIT_SCHEME -DDEFAULT_LIBRARY_PATH=\"/usr/local/lib/mit-scheme-x86-64-11.2\" -I. -I. -O3 -frounding-math -fno-builtin-floor -Wall -Wclobbered -Wempty-body -Wignored-qualifiers -Wimplicit-fallthrough -Wmissing-field
-initializers -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Woverride-init -Wpointer-arith -Wredundant-decls -Wshift-negative-value -Wtype-limits -Wundef -Wuninitialized -Wwrite-strings -Wno-error=stringop-truncatio
n -Werror -o regex.o -c regex.c
regex.c: 在函数‘re_match’中:
regex.c:154:45: 错误:pointer ‘stack_start’ may be used after ‘realloc’ [-Werror=use-after-free]
154 | (& (stack_temporary [(stack_pointer - stack_start)])); \
| ^
regex.c:873:9: 附注:in expansion of macro ‘PUSH_FAILURE_POINT’
873 | PUSH_FAILURE_POINT ((pattern_pc + offset), match_pc);
| ^~~~~~~~~~~~~~~~~~
regex.c:148:11: 附注:call to ‘realloc’ here
148 | (realloc \
| ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149 | (stack_start, (stack_length * (sizeof (unsigned char *)))))); \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regex.c:873:9: 附注:in expansion of macro ‘PUSH_FAILURE_POINT’
873 | PUSH_FAILURE_POINT ((pattern_pc + offset), match_pc);
| ^~~~~~~~~~~~~~~~~~
regex.c:154:45: 错误:pointer ‘stack_start’ may be used after ‘realloc’ [-Werror=use-after-free]
154 | (& (stack_temporary [(stack_pointer - stack_start)])); \
| ^
regex.c:981:9: 附注:in expansion of macro ‘PUSH_FAILURE_POINT’
981 | PUSH_FAILURE_POINT (NULL, NULL);
| ^~~~~~~~~~~~~~~~~~
regex.c:148:11: 附注:call to ‘realloc’ here
148 | (realloc \
| ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149 | (stack_start, (stack_length * (sizeof (unsigned char *)))))); \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regex.c:981:9: 附注:in expansion of macro ‘PUSH_FAILURE_POINT’
981 | PUSH_FAILURE_POINT (NULL, NULL);
| ^~~~~~~~~~~~~~~~~~
cc1:所有的警告都被当作是错误
make[1]: *** [Makefile:182:regex.o] 错误 1
make[1]: 离开目录“/home/xifu/下载/mit-scheme-11.2/src/microcode”
make: *** [Makefile:796:microcode/scheme] 错误 2
[xifu@DESKTOP-DJDGSEK src]$ ^C
[xifu@DESKTOP-DJDGSEK src]$


  • 草酱
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
regex.c报错,找对应位置。
前面那个不对应可能是makefile定义了什么东西。
然后报错是因为编译查错等级调得很高,不仅用了-werror,还用了其他各种检查机制,本来应该是warning


2025-07-25 05:53:26
广告
不感兴趣
开通SVIP免广告
  • 博丽灵梦
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看起来报错的这段代码意思是”如果缓冲区大小不够,那么尝试扩大到原来的两倍“。没看出这段代码有什么问题,所以我选择将mkefile文件里的-Werror去掉,最后编译成功了。虽然编译时有不少警告,但是软件能跑起来了,以后发生什么内存泄漏的以后在说,搞不好以后我不玩这东西了。
总之多谢了……@🍀草酱🍀
#define PUSH_FAILURE_POINT(pattern_pc, match_pc) do \
{ \
if (stack_pointer == stack_end) \
{ \
long stack_length; \
unsigned char **stack_temporary; \
\
stack_length = ((stack_end - stack_start) * 2); \
if (stack_length > (re_max_failures * 2)) \
RE_RETURN (-4); \
stack_temporary = \
((unsigned char **) \
(realloc \
(stack_start, (stack_length * (sizeof (unsigned char *)))))); \
if (stack_temporary == NULL) \
RE_RETURN (-3); \
stack_end = (& (stack_temporary [stack_length])); \
stack_pointer = \
(& (stack_temporary [(stack_pointer - stack_start)])); \
stack_start = stack_temporary; \
} \
(*stack_pointer++) = (pattern_pc); \
(*stack_pointer++) = (match_pc); \
} while (0)


  • 草酱
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么鬼自动扩容。之所以会报错,是因为realloc之后start指向的内存可能被回收,所以编译器认为继续使用这个start有风险。但是实际上后面只是用这个start指针来重新计算偏移量,并没有访问start指向的内存。
所以逻辑上代码是没有问题的,只是编译器查错等级过高,某种意义上也可以说代码书写不够规范。


  • 80i7勾丶心斗角
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
彩胸 学-各种-插件-开发-到-siki学院 -------怕傅


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 15回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示