gpt4 book ai didi

c++ - strcpy() 上的特权指令运行时错误

转载 作者:行者123 更新时间:2023-11-28 07:26:19 25 4
gpt4 key购买 nike

我在将 C++ Builder 6 项目升级到 C++ Builder XE3 时遇到问题。目前我的问题是:在 Release模式下编译和运行时,项目会抛出“特权指令”。我已经追踪到围绕调用 strcpy() 的两个不同 for 循环的错误。我试图将其更改为 strncpy() 并包括字符串大小,但无济于事。我所知道的是,当我注释掉这两行时,错误就消失了。

相关代码:

/** Main.h */
class TForm1 : public TForm {
published:
void __fastcall ReadCalFromUnitBtnClick(TObject *Sender);
private:
struct CALIBRATION {
char name[64];
float gain1;
float gain2;
float offset;
...
... // A few more values that aren't pertinent to this question.
};
CALIBRATION calibr[256];
void __fastcall TForm1::ReadCalibrationFromUnit(CALIBRATION *reg);
};
extern char *ADC_names[];

/** Main.cpp */
char *ADC_names[] = {
"String 1",
"String 2",
"String 3",
"String 4",
"String 5",
"String 6",
"String 7",
"String 8"
};

void __fastcall TForm1::ReadCalFromUnitBtnClick(TObject *Sender) {
memset(calibr,0,sizeof(calibr));
ReadCalibrationFromUnit(calibr);
}

void __fastcall TForm1::ReadCalibrationFromUnit(CALIBRATION *reg) {

// for (int j=0, j < 8, j++) { // Incorrect; but no bearing on actual soln.

for (int j=0; j < 8; j++) {
// Here's the problematic line. Another loop exists which does the same
// thing for another 18 array members in reg, but is essentially
// identical to this one.
strcpy(reg[j].name, ADC_names[j]);
}
}

我已经尝试了很多事情,例如将 ADC_names 设为 const char,省略其上的外部声明,尝试将 strncpy() 放入 reg[] 数组中...

据我所知,所有内存都已正确分配以解决所有问题,ADC_names[] 远非空,因为我们甚至在进入表单构造函数之前就定义了它。尝试直接在 for 循环中编辑 calibr[],而不是它传入的 reg 函数变量,但错误仍然存​​在。

真正奇怪的是,这个错误只出现在我在 Release 模式下编译和运行时。 Debug根本不会报这个错。

错误也会随着程序执行的进行而改变。 “特权错误”仅在通过自动连接按钮单击调用该功能时在启动时显示。稍后,当手动单击该按钮时,错误更改为“地址 00000000 处的访问冲突。读取地址 00000000。”

我已经试着解决这个问题,但由于我对内存处理的了解有限,一切似乎都还不错。知道是什么原因造成的吗?

谢谢。-丹尼尔

最佳答案

也许这只是您在此处发布代码时的复制和粘贴错误,但您是否意识到您的 for 循环是“错误的”?

for (int j=0, j < 8, j++)

应该是

for (int j=0; j < 8; j++)

对吗?想知道为什么你不会得到编译器错误,但我不熟悉 C++ 构建器的编译器...

关于c++ - strcpy() 上的特权指令运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com