#define ARRAY_SIZE 20
float DataSource[ARRAY_SIZE];
void Read(unsigned char const *Source, unsigned char *Destination, unsigned long DataSize)
{
for ( unsigned long i = 0; i < DataSize; i++)
{
*(Destination + i*DataSize) = *(Source + i*DataSize);
}
}
void fun()
{
int Index;
float Dest;
for ( Index = 0; Index < ARRAY_SIZE; Index++ )
{
Read((unsigned char *)&DataSource[Index], (unsigned char *)&Dest, sizeof(DataSource[Index]));
}
}
上面的代码在调用 Read() 时遇到问题,我的 Index 变量被覆盖,我确信丑陋的指针转换是罪魁祸首,但我无法准确理解这里发生的事情。
unsigned char 指针类型是强制性的,因为上面的代码是为了模拟一些驱动级软件并保持相同的原型(prototype)。
有人可以帮助我理解这里的问题吗?以上代码除了Read()的原型(prototype)外都是可以修改的。
最佳答案
错误在这里:
for ( unsigned long i = 0; i < DataSize; i++)
{
// vvvvvvvvvv vvvvvvvvvv
*(Destination + i*DataSize) = *(Source + i*DataSize);
}
i * DataSize
总是大于 i
=>“越界”访问。
替换为:
for ( unsigned long i = 0; i < DataSize; i++)
{
*(Destination + i) = *(Source + i);
}
关于c++ - 指针类型转换改变了意外的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268142/