我有这个简单的方法来移动数组中的元素。
void queuePut(uint32_t val, uint32_t *q, int qlen) {
for (int i=qlen; i>0; i--) {
q[i] = q[i-1];
}
q[0] = val;
}
在我的类头中我定义了一个结构
@interface MyClass : NSObject {
struct {
uint32_t cookie[10];
uint32_t value[10];
} queue;
}
我反复将元素放在两个队列的前面
queuePut((uint32_t)cookie, myClassInstance->queue.cookie, cookieQueueLen);
queuePut((uint32_t)intValue, myClassInstance->queue.value, valueQueueLen);
当我这样做时,我的值(value)队列布局随着时间的推移如下:
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
1.0.0.0.0.0.0.0.0.0.
1.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
当我删除第一行 queuePut((uint32_t)cookie, ...
值队列显示这个(我想要它是什么):
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.
1.0.0.0.0.0.0.0.0.0.
1.1.0.0.0.0.0.0.0.0.
0.1.1.0.0.0.0.0.0.0.
0.0.1.1.0.0.0.0.0.0.
0.0.0.1.1.0.0.0.0.0.
0.0.0.0.1.1.0.0.0.0.
0.0.0.0.0.1.1.0.0.0.
这是什么原因造成的?
问候, 埃里克
最佳答案
cookieQueueLen
和 valueQueueLen
到底是什么?
这是可疑的:
void queuePut(uint32_t val, uint32_t *q, int qlen) {
for (int i=qlen; i>0; i--) {
q[i] = q[i-1];
}
q[0] = val;
}
如果您为 qlen
传递 10,那么在第一次迭代中您将写入 q[10]
,这超出了 的范围>cookie
(或value
)数组。你在破坏内存。
所以在这种情况下,您正在写入 cookie
数组的末尾并写入 value
数组的开头。
关于objective-c - 这段C/Obj-C代码让我百思不得其解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734402/