我在代码上遇到麻烦,希望您能提供帮助。当我输入一个奇数时,我给出了一个分段故障,如果是奇数,则为总线错误。我正在尝试将00添加到数据阵列中,以将其从长度NPrime带到我输入的新的,更大的ndprime。我正在用函数*fpad进行此操作,其中我的paddata数组包含nprime复数数字(即2*nprime组件),并且需要提高到2*ndprime。
double *fpad(double *paddata, unsigned int Nprime, unsigned int Ndprime)
{
if (Nprime!=Ndprime)
{
paddata=(double*)realloc(paddata,(sizeof(double)*((2*Ndprime)-1)));
for(i>=((2*Nprime));i<(2*Ndprime);i++) paddata[i]=0;
if(paddata==NULL) /* Checks memory is reallocated */
{
printf("nError reallocating memory.n");
free(paddata);
exit(EXIT_FAILURE);
}
}
return(paddata);
}
任何帮助将不胜感激,我看不到我在做什么错。
您使用的是未宣布的变量i
(或者也许是全局)。
for(i>=((2*Nprime));i<(2*Ndprime);i++) paddata[i]=0;
您的第一个条件检查i
是小于还是大于2*Nprime
(但未设置i
)。然后,它使用i
的不概括性限制值访问数组,这可能会导致问题。
您仅检查内存重新定位是否在循环被诊断为有问题的循环后是否成功。如果内存分配失败,则您已经仔细地将指针的原始副本击倒了此功能。释放零指针是没有意义的 - 但是由于您在分配失败方面退出,因此没有太多问题。
在内存检查后将您的初始化循环放置,括号的数量略有少量:
for (int i = 2*Nprime; i < 2*Ndprime; i++) // C99 (and C++)
paddata[i] = 0.0;
如果您不能使用C99表示法,请在功能中声明int i;
。
不要创建称为 i
的全局变量。
请注意编译器的警告。如果不是警告您"没有效果的语句",您就没有打开足够的警告。
我建议函数memset函数init in yin yer your your dynamic array。>