【发布时间】:2017-09-13 09:50:25
【问题描述】:
我是 ARM 平台的新手。
下面的代码被用在一个函数中,用于找出一些复数样本的共轭乘法并将其滑动到一些样本。
此代码在 linux 12.04 版本的本机编译器中正常工作。在 ARM 中运行相同的代码时,它不会执行该功能。它只是从正在运行的代码中退出。
#include<stdio.h>
int main()
{
float aa[12]={1,1,1,1,1,1,1,1,1,1,1,1};
float *x=aa,*y=x+6,real=0,imag=0;
fn_ComplexMultiply_addthem(x,y,6,&real,&imag);
printf("real value = %f\n",real);
printf("real value = %f\n",imag);
}
void fn_ComplexMultiply_addthem(float *x, float *y, float len, float *re, float *im)
{
int j;
for( j=0; j<len; j+=2)
{
*re += (x[j]*(y[j]));
*re -= (x[j+1]*(-y[j+1]));
*im += (x[j]*(-y[j+1]));
*im += (x[j+1]*(y[j]));
}
}
我无法理解它的原因。每个指针都指向某个值,然后它应该给我任何可能正确的结果。相反,它只是从模拟中退出。
它会不会与其他一些东西(如堆栈或其他内存)有问题? 请帮我调试一下。
【问题讨论】:
-
请尝试创建Minimal, Complete, and Verifiable Example 向我们展示。还请包括完整的 Valgrind 输出。并告诉我们哪些行被抱怨(在 MCVE 中使用 cmets)。
-
当您使用调试器逐步完成时,哪一行失败了?
-
对了,如果你把
y的初始化改成y = aa + 6,会发生什么? -
能否请您包括您得到的实际错误?完整的,完整的,没有修改,复制粘贴。当然还要提供一个实际构建的Minimal, Complete, and Verifiable Example(除非这是你的问题)?
-
如果不能调试,那么至少可以打印出指针吗?就像例如
printf("x = %p, y = %p, y - x = %d\n", (void *) x, (void *) y, (int) (y - x));?输出看起来有效吗?指针之间的差异是24字节(6 * 4(float的大小))吗?
标签: compiler-errors compiler-optimization