Code Blocks下C++程序出现‘Cannot access memory at address’错误的解决求助
Code Blocks下C++程序出现‘Cannot access memory at address’错误的解决求助
大家好,我刚接触C++,最近在把一段原本运行在Arduino上的代码移植到Windows PC的Code Blocks环境中,结果遇到了棘手的段错误,已经卡了5个小时,周末必须得把这个问题解决掉,真心恳请各位大佬帮忙!
问题场景
当我把*pads传入get_padding函数时,程序直接崩溃了,崩溃的位置在函数里的pads_in[i] = xxx;这一行,调试器给出的错误信息显示是内存访问错误导致的段错误。
相关代码片段
首先是调用get_padding的部分:
int range = (g_code_length - g_B26_len)-1; char* pads[range]; // 之前测试用的固定长度数组,当时没出问题 //char*pads[2]; //usleep(2000); //delay(2); char*new_pads = get_padding(*pads,g_B26_len,unit,p);
然后是get_padding函数的实现:
char* Codemanager::get_padding(char* pads_in,int b26codelen ,int uniit , char clii ) { int rot1 = g_brand_id; int rot3 = get_index_lookup(clii,0)+1; int range = (10 - g_B26_len)-1; for(int i = 0; i < range; i ++ ){ char xxx = caeser_cipher(uniit,rot1,get_char_lookup(i+1,0),rot3); pads_in[i] = xxx; // 程序在这里崩溃,触发段错误 } // 原代码中此处应该有返回语句,暂时未贴出 }
调试器给出的错误信息
At C:\C++ Programming\Algo1\Codemanager.cpp:557
Program terminated with signal SIGSEGV, Segmentation fault.
Debugger finished with status 0
我的疑惑
之前用固定长度的char*pads[2];测试时程序没出问题,但换成动态计算range的数组后就崩溃了。我猜测可能是pads或者pads_in的内存没有正确分配,但刚接触C++,对指针和内存管理还不太熟悉,实在找不到问题根源。
有没有大佬能帮我分析一下问题出在哪里?应该怎么修改才能解决这个段错误?
备注:内容来源于stack exchange,提问作者PaulF
相关产品推荐
相关产品推荐

