如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
How to fix 'Unhandled exception at <memory location> in <program name>. Access violation writing location <memory location>.' in visual studio 2017
我正在使用库libxl编写代码以在excel中制作发票。我的代码创建一个文件,写入该文件,然后将该文件保存在项目文件夹中。
但是,当我进行调试时,我看到一个"未处理的异常",在写入特定位置时存在访问冲突。该异常实际上显示"BillingSoft.exe:0xC0000005:访问违规写入位置0x00C3DED4.0x100437D7(libxl.dll)的未处理异常"。我已经阅读了许多文章和解决方案,但似乎都没有解决我的问题。我尝试使用
Book* book = (Book*)malloc(sizeof(book));
在声明"book"之前,但它只是更改位置值,并不能解决问题。
这是我的主要功能:
int main()
{
Book* book = xlCreateBook(); // xlCreateXMLBook() for xlsx
if (book)
{
Font* boldFont = book->addFont();
boldFont->setBold();
Font* titleFont = book->addFont();
titleFont->setName(L"Arial Black");
titleFont->setSize(16);
Format* titleFormat = book->addFormat();
if (titleFormat = nullptr)
{
titleFormat->setFont(titleFont);
}
Format* headerFormat = book->addFormat();
if (headerFormat = nullptr)
{
headerFormat->setAlignH(ALIGNH_CENTER);
headerFormat->setBorder(BORDERSTYLE_THIN);
headerFormat->setFont(boldFont);
headerFormat->setFillPattern(FILLPATTERN_SOLID);
headerFormat->setPatternForegroundColor(COLOR_TAN);
}
Format* descriptionFormat = book->addFormat();
if (descriptionFormat = nullptr)
{
descriptionFormat->setBorderLeft(BORDERSTYLE_THIN);
}
Format* amountFormat = book->addFormat();
if (amountFormat = nullptr)
{
amountFormat->setNumFormat(NUMFORMAT_CURRENCY_NEGBRA);
amountFormat->setBorderLeft(BORDERSTYLE_THIN);
amountFormat->setBorderRight(BORDERSTYLE_THIN);
}
Format* totalLabelFormat = book->addFormat();
if (totalLabelFormat = nullptr)
{
totalLabelFormat->setBorderTop(BORDERSTYLE_THIN);
totalLabelFormat->setAlignH(ALIGNH_RIGHT);
totalLabelFormat->setFont(boldFont);
}
Format* totalFormat = book->addFormat();
if (totalFormat = nullptr)
{
totalFormat->setNumFormat(NUMFORMAT_CURRENCY_NEGBRA);
totalFormat->setBorder(BORDERSTYLE_THIN);
totalFormat->setFont(boldFont);
totalFormat->setFillPattern(FILLPATTERN_SOLID);
totalFormat->setPatternForegroundColor(COLOR_YELLOW);
}
Format* signatureFormat = book->addFormat();
if (signatureFormat = nullptr)
{
signatureFormat->setAlignH(ALIGNH_CENTER);
signatureFormat->setBorderTop(BORDERSTYLE_THIN);
}
Sheet* sheet = book->addSheet(L"Sheet1");
if (sheet)
{
sheet->writeStr(2, 1, L"Invoice No. 3568", titleFormat);
sheet->writeStr(4, 1, L"Name: John Smith");
sheet->writeStr(5, 1, L"Address: San Ramon, CA 94583 USA");
sheet->writeStr(7, 1, L"Description", headerFormat);
sheet->writeStr(7, 2, L"Amount", headerFormat);
sheet->writeStr(8, 1, L"Ball-Point Pens", descriptionFormat);
sheet->writeNum(8, 2, 85, amountFormat);
sheet->writeStr(9, 1, L"T-Shirts", descriptionFormat);
sheet->writeNum(9, 2, 150, amountFormat);
sheet->writeStr(10, 1, L"Tea cups", descriptionFormat);
sheet->writeNum(10, 2, 45, amountFormat);
sheet->writeStr(11, 1, L"Total:", totalLabelFormat);
sheet->writeNum(11, 2, 280, totalFormat);
sheet->writeStr(14, 2, L"Signature", signatureFormat);
sheet->setCol(1, 1, 40);
sheet->setCol(2, 2, 15);
}
book->save(L"Invoice.xls"); // exception here!
book->release();
}
return 0;
}
我只是希望程序正常工作而没有任何错误。请帮我解决我的问题。任何帮助将不胜感激!
您总是覆盖 Excel 为您提供的所有内容。因此,当您这样做时:
sheet->writeStr(2, 1, L"Invoice No. 3568", titleFormat);
你传入titleFormat
这是一个nullptr
,因为行:
if (titleFormat = nullptr)
打开警告并修正代码:
if (titleFormat != nullptr)
所有其他if
也是如此.
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- <<操作员在下面的行中工作
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置