【发布时间】:2017-12-19 23:08:08
【问题描述】:
所以我利用这个网站获得了我认为正确的语法,但我仍然卡住了。
我在我的项目中引入了一些预先存在的快速哈特利变换代码,这些代码目前使用 FFT,除了 FHT 的大小和重叠是硬编码的之外,所有这些都可以工作,我想在我的 FFT 代码中使用这些值在运行时动态设置大小。
这需要二维全局数组。
所以我在任何函数之外定义数组,以便全局:
`double **mInput;`
在初始化函数中我这样做:
`
kWindowSize = (int)fftlen; //fftlen is a global from my existing program
mInput = new double*[kWindowSize];
for (int i = 0; i < kWindowSize; ++i)
mInput[i] = new double[2];
printf("\nmInput pointer: %x mInput value: %f", (void *)&mInput, mInput);
printf("\nfirst sample: %f second sample %f", mInput[0][0], mInput[0][1]);`
在另一个函数中编译和运行良好:
`printf("\n\n\n-->mInput pointer: %x mInput value: %f", (void *)&mInput, mInput);
printf("\n-->first sample: %f second sample %f", mInput[0][0]);
printf("\n-->second sample %f", mInput[0][1]);`
它在第二个 printf 状态(尝试访问 2d 数组中的值)崩溃,并非法写入位置零。
似乎 for 循环中的新语句是在创建本地数组而不是全局数组?
自从我从这里得到动态分配语法后,我开始怀疑这是否是 intel 编译器中的错误?
建议?
谢谢!
【问题讨论】:
-
有什么理由不使用
std::vector<std::vector<double>>而不是double **? -
当
printf期望%f时传递mInput是不好的。printf("\n-->first sample: %f second sample %f", mInput[0][0]);在这种情况下printf需要两个参数。 -
“这需要二维全局数组”——谁说的?如果你足够想要全局变量,总是可以避免的。
-
new double[2]?真的吗? -
printf 仅用于调试。第一次将 mInput 写入 init 函数外部时,代码会崩溃。
标签: c++ arrays multidimensional-array dynamic global