C++ c++;:在if-else条件中定义数组将在其退出后擦除

C++ c++;:在if-else条件中定义数组将在其退出后擦除,c++,arrays,if-statement,memory-management,C++,Arrays,If Statement,Memory Management,我有一个填充数组的脚本,可以使用函数,也可以不使用函数 它接受一个参数readmode,它决定是否使用该函数;以及一个参数len_arr,它决定数组的长度 我简化了代码,这样每次迭代数组长度都会增加,但在实际情况中,每次迭代我都会加载不同长度的音频文件,因此我使用malloc初始化,然后在完成后处理后释放它 主脚本 //导入 #包括/*cout*/ #包括/*printf*/ #包括/*atoi*/ 使用名称空间std; 无效函数_1(int len_arr,双*输出缓冲区){ 对于(int j

我有一个填充数组的脚本,可以使用函数,也可以不使用函数

它接受一个参数
readmode
,它决定是否使用该函数;以及一个参数
len_arr
,它决定数组的长度

我简化了代码,这样每次迭代数组长度都会增加,但在实际情况中,每次迭代我都会加载不同长度的音频文件,因此我使用malloc初始化,然后在完成后处理后释放它

主脚本

//导入
#包括/*cout*/
#包括/*printf*/
#包括/*atoi*/
使用名称空间std;
无效函数_1(int len_arr,双*输出缓冲区){

对于(int j=0;j取消注释此//双*缓冲区;应在上面为循环定义缓冲区

double *buffer;
在if-else块中,只使用缓冲区而不定义它

buffer = (double *)malloc(len_arr * sizeof(double));
读取错误:

./debug_ifelse.cpp: In function ‘int main(int, char**)’:
./debug_ifelse.cpp:41:48: error: ‘buffer’ was not declared in this scope
     cout << "\n4 : Memory Address of buffer="<<buffer << endl;
创建另一个可能不需要的同名(不同)变量。将其设为
buffer=(double*)malloc(len_arr*sizeof(double));

注意,第40行确实需要
buffer
,因为在所有循环之后,
free(buffer)
,所以在该范围内需要它

旁注:

  • 因为您的循环一直在说
    buffer=malloc(…
    您正在泄漏 记忆
  • 如果你是C++,为什么要使用MalC/C++而不是NeX/Delphi?< /LI>
我不认为你粘贴的代码会在这里编译。提示:在C++中使用<代码> STD::向量< /代码>,并且尽可能远离C数组和指针。你可以使用<代码> PuxyBuff</代码>代替所有的重新分配代码。@ TADMAN我使用数组的原因是因为我读缓冲区作为音频文件,如M 3段所述。y问题,使用
sf\u read\u double(填充,缓冲区)
将音频加载到数组。我简化了对音频文件的读取,只需将其填充为
函数_1
。但问题的主要目的是解决为什么在退出if-else条件后,我的缓冲区无法使用。您在
if
范围内声明内容,因此在该范围之外无法访问。哟您需要在分支代码之前声明指针。您还可以创建任意大小的向量,并将其用作缓冲区,就像指针一样对其进行写入,这大大简化了内存管理。因此我不理解错误,我在
double*buffer=(double*)malloc(len_arr*sizeof)中明确定义了缓冲区I/CODE在if条件下,为什么它不声明?我会尝试新的/DELL,谢谢你的建议!我是C++新手,所以我用过时的教程过时的方法。
double *buffer = (double *)malloc(len_arr * sizeof(double));