c++ - C++:这是使用整数变量作为函数调用指针的正确方法吗?
问题描述
我是 C++ 新手。
背景:我发现这个第三方代码片段似乎可以工作,但基于我(非常有限)的 C++ 知识,我怀疑它会导致问题。片段如下:
int aVariable;
int anInt = 1;
int anotherInt = 2;
int lastInt = 3;
aVariable = CHAIN(anInt, anotherInt, lastInt);
其中 CHAIN 定义如下(这是库的一部分):
int CHAIN(){ Map(&CHAIN, MakeProcInstance(&_CHAIN), MAP_IPTR_VPN); }
int _CHAIN(int i, int np, int p){ return ASMAlloc(np, p, &chainproc); }
int keyalloc[16384], kpos, alloc_locked, tmp[4];
int ASMAlloc(int np, int p, alias proc)
{
int v, x;
// if(alloc_locked) return 0 & printf("WARNING: you can declare compound key statements (SEQ, CHAIN, EXEC, TEMPO, AXIS) only inside main() call, and not during an event.\xa");
v = elements(&keyalloc) - kpos - 4;
if(v < np | !np) return 0; // not enough allocation space or no parameters
Map(&v, p); Dim(&v, np); // v = params array
keyalloc[kpos] = np + 4; // size
keyalloc[kpos+1] = &proc; // function
keyalloc[kpos+2] = kpos + 2 + np; // parameters index
while(x < np)
{
keyalloc[kpos+3+x] = v[x];
x = x+1;
}
keyalloc[kpos+3+np] = kpos + 3 | JUMP;
x = ASMFind(kpos);
if(x == kpos) kpos = kpos + np + 4;
return x + 1 | PROC; // skip block size
}
int ASMFind(int x)
{
int i, j, k; while(i < x)
{
k = i + keyalloc[i]; // next
if(keyalloc[i] == keyalloc[x]) // size
if(keyalloc[i+1] == keyalloc[x+1]) // proc
{
j = x-i;
i = i+3;
while(keyalloc[i] == keyalloc[j+i]) i = i+1; // param
if((keyalloc[i] & 0xffff0000) == JUMP) return x-j;
}
i = k;
}
return x;
}
编辑:
奇怪的是,跑步
CHAIN(aVariable);
有效执行
CHAIN(anInt, anotherInt, lastInt);
不知何故。这就是让我相信aVariable实际上是一个指针的原因。
问题:
像这样将参数化函数调用存储到整数变量中是否正确?“aVariable”是否像指针一样工作,或者这可能会破坏随机内存区域?
解决方案
您正在调用一个函数(通过一个混淆的接口),并将结果存储在一个整数中。它可能会也可能不会导致问题,这取决于您如何使用该值/您期望它的含义。
您的示例包含太多未定义的符号,读者无法提供更好的答案。
另外,我认为这是 C,而不是 C++ 代码。
推荐阅读
- python - 登机/退出率的多次迭代
- c# - 应用重启后 Akka.Net 内存中持久性调用“Recover”
- python - 从 MongoDB 集合中查找大型 DataFrame 中日期的匹配项并使用结果创建新列
- opengl - 在 GLSL 中“贴花”的最简单方法
- node.js - 节点:在跟踪它运行多长时间的同时,每秒一致地运行函数 X 次
- graphics - 父视图缩放 OnClickListener
- css - Adjust size of label to the wrapped text
- c - Ghidra 可以重新编译并运行一个简短的函数吗?
- ios - 在某些设备上使用 UIViewControllerRepresentable 会破坏 GeometryReader
- node.js - 节点电子商务购物车 NaN 问题