我正在阅读OfficeOpenXml.ExcelWorksheet并在Collection的中间获取ArgumentOufOfRangeException.
我是这样读的process.Information = sheet.Cells[line, i++].Text;.在这条线i = 22,而sheet.Dimension.Column = 28.

当我正在调试和枚举集合时,我发现.Text当.Value方法显示正确的值时,抛出异常.
根据异常堆栈跟踪,System.Text.StringBuilder.Insert()方法抛出异常
----编辑----在接受答案后我意识到问题不仅仅在于阅读.我使用额外的列(导入成功或不成功)回复相同的文件,当我正在进行表格格式化时,我再次得到相同的错误,所有这些都归因于System.Text.StringBuilder.Insert()方法.我正在尝试自动调整列sheet.Column(22).AutoFit()
这是堆栈跟踪
at System.Text.StringBuilder.Insert(Int32 index, Char* value, Int32 valueCount)
at System.Text.StringBuilder.Insert(Int32 index, Char value)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator.ToNetFormat(String ExcelFormat, Boolean forColWidth)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator..ctor(String format, Int32 numFmtID)
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.get_FormatTranslator()
at OfficeOpenXml.ExcelRangeBase.GetFormattedText(Boolean forWidthCalc)
at OfficeOpenXml.ExcelRangeBase.get_TextForWidth()
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth, Double MaximumWidth)
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth)
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns()
at OfficeOpenXml.ExcelColumn.AutoFit()
at SkiptraceAPI.Models.ProcessosRepository.formatExcel(ExcelPackage package, Boolean addValidation) in
Run Code Online (Sandbox Code Playgroud) 它在For循环的中间抛出一个ArgumentOutOfRangeException,请注意我删除了for循环的其余部分
for (int i = 0; i < CurrentUser.Course_ID.Count - 1; i++)
{
CurrentUser.Course[i].Course_ID = CurrentUser.Course_ID[i];
}
Run Code Online (Sandbox Code Playgroud)
课程代码是
public class Course
{
public string Name;
public int Grade;
public string Course_ID;
public List<string> Direct_Assoc;
public List<string> InDirect_Assoc;
public string Teacher_ID;
public string STUTeacher_ID;
public string Type;
public string Curent_Unit;
public string Period;
public string Room_Number;
public List<Unit> Units = new List<Unit>();
}
Run Code Online (Sandbox Code Playgroud)
和CurrentUser(这是用户的新声明)
public class User
{
public string Username;
public string Password;
public string FirstName;
public string LastName;
public …Run Code Online (Sandbox Code Playgroud) 以下代码从Toolbar2000中复制.它是从INI文件中读取工具栏位置和停靠状态的例程的一部分.我在初始化期间称这个例程.下面的代码迭代主窗体上的所有组件(OwnerComponent)并加载它找到的任何工具栏的设置.
for I := 0 to OwnerComponent.ComponentCount-1 do begin
ToolWindow := OwnerComponent.Components[I]; // <------------------------
....
Run Code Online (Sandbox Code Playgroud)
这个迭代需要一些时间(秒 - 表单上有1500多个组件),我在显示的点上得到一个范围错误.我已经确定在执行此循环时正在从主窗体的组件中删除一个或多个项目,因此一旦发生这种情况,最终循环会尝试访问一个超过数组末尾的项目(可能最好将其编码为一个"downto"for循环来防止这种情况).
无论如何,我需要找出主要表单丢失组件的位置.谁能给我任何关于如何做到这一点的Delphi 2006调试技巧?我不希望在我的程序中释放任何主要表单组件.
UPDATE
我发现当我在设计时重新定位工具栏的默认停靠位置时,我无意中将它停靠在另一个工具栏上,而不是另一个工具栏所在的停靠站点.我通过从工具栏中删除工具栏来解决问题停靠并将其添加到码头.因此导致问题的安排是:
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
Run Code Online (Sandbox Code Playgroud)
并且解决方法是安排他们:
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
Run Code Online (Sandbox Code Playgroud)
它仍然指向TB2k代码中的一个错误 - 人们会认为它应该能够处理嵌套的工具栏.
[在此发现一个疑问:C++ - 检测超出范围的访问 ]
如果我有一个"超出范围矢量访问"的程序,像这样:
std::vector<int> A(2);
...
A[10] = 3;
Run Code Online (Sandbox Code Playgroud)
我有办法确定找到这个错误吗? 我的意思是在调试模式下编译并查看某些断言是否会停止执行.
到目前为止,我已经自己查了一下.但可能是我不必编写额外的代码?
PS我当然检查过断言.它没有打电话.
有了这个程序:
#include <vector>
int main() {
std::vector<int> A(2);
A[10] = 3;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
汇编
g++ 1.cpp -O0; ./a.out
Run Code Online (Sandbox Code Playgroud)
所以看起来std在代码中没有断言,我不禁想知道为什么他们不做这么简单的检查.
当我运行下面显示的简单程序时,我在Cygwin和Ubuntu OS上得到不同的终端输出.
#include <cstdio>
#include <stdexcept>
#include <cmath>
using namespace std;
double square_root(double x)
{
if (x < 0)
throw out_of_range("x<0");
return sqrt(x);
}
int main() {
const double input = -1;
double result = square_root(input);
printf("Square root of %f is %f\n", input, result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Cygwin上,与Ubuntu不同,我没有收到任何表明抛出异常的消息.可能是什么原因?我是否需要为Cygwin下载一些内容,以便它能够处理异常情况?
我使用Cygwin版本1.7.30和GCC 4.9.0.在Ubuntu上,我有GCC 4.8.1版本13.10.我怀疑在这种情况下编译器的差异很重要.
在上一段代码中,我收到了标题中列出的完全相同的错误.
我的代码中有一个用户名验证器,但忘记包含以下代码:
password =ESAPI.validator().getValidInput("Login password", password, "Password", 20, false);
Run Code Online (Sandbox Code Playgroud)
添加后我解决了这个问题.
现在在我的下一个java页面中,我遇到了同样的问题并检查了代码,但如果我实际上遗漏了某些内容,则无法找到我所缺少的内容.
我与另一段正在处理的代码有同样的错误,并且能够解决它,因为我忘了包含另一行代码.
但是对于这段代码,我已经多次查看过,并且无法弄清楚它有什么问题.
这是代码:
package com.tunestore.action;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.util.MessageResources;
import org.owasp.esapi.ESAPI;
import com.tunestore.util.IWithDataSource;
public class RegisterAction extends Action implements IWithDataSource {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) …Run Code Online (Sandbox Code Playgroud) java error-handling sqlexception resultset outofrangeexception
我正在制作农场/塔防游戏,我在编程时非常新.我似乎在XNA中使用Lists <>或数组时遇到了一个主要问题.我无法让它从列表中返回我想要的索引.
主要问题是我的种植引擎.我已经成功实施了种植系统,可以生成具有不同属性的植物(精灵对象)列表并将它们放在地图上.现在,我需要一种方法来访问工厂列表中的特定工厂,基于鼠标点击该工厂.我觉得我非常接近,但最终我得到了一个无法解决的ArgumentOutOfRangeException.以下是代码的演练:
初始化
public void Addplants()
{
switch (Mode)
{
case "Wotalemon":
NewPlant = new Plant(Texture, msRect);
NewPlant.AddAnimation("seed", 0, 16, 64, 64, 1, 0.1f);
NewPlant.AddAnimation("sprout", 64, 16, 64, 64, 1, 0.1f);
NewPlant.AddAnimation("wota", 128, 16, 64, 64, 1, 1.0f);
NewPlant.CurrentAnimation = "seed";
NewPlant.DrawOffset = new Vector2(32, 48);
NewPlant.Position = Position;
NewPlant.Type = "wotalemon";
NewPlant.Birthday = Days;
NewPlant.IsSelected = false;
plants.Add(NewPlant);
thisPlant = NewPlant;
//various plants after this
Run Code Online (Sandbox Code Playgroud)
更新/绘图
我使用一些简单的foreach循环来更新和绘制植物,这里没有问题.
GetInfo(此方法使用spriteobject的hitbox属性和mouseRectangle)
public void GetInfo(Rectangle ms)
{
msRect = ms;
for (int …Run Code Online (Sandbox Code Playgroud) 起初,我真的知道有不止一篇关于它的帖子,但没有帮助我修复错误/错误.我很抱歉,如果它的转发,并希望你们可以帮助我摆脱这个错误.
11-28 17:36:36.110: W/dalvikvm(8380): threadid=1: thread exiting with uncaught exception (group=0x40a331f8)
11-28 17:36:36.110: E/AndroidRuntime(8380): FATAL EXCEPTION: main
11-28 17:36:36.110: E/AndroidRuntime(8380): java.lang.IllegalArgumentException: pointerIndex out of range
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.MotionEvent.getX(MotionEvent.java:1974)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processJoyPadTouchRelease(TouchEventControler.java:194)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processRelease(TouchEventControler.java:237)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processTouchEvent(TouchEventControler.java:88)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.GameField.onTouchEvent(GameField.java:142)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.View.dispatchTouchEvent(View.java:5546)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
11-28 17:36:36.110: E/AndroidRuntime(8380): at …Run Code Online (Sandbox Code Playgroud) 我有一个字符串向量:
vector<string> tokenTotals;
Run Code Online (Sandbox Code Playgroud)
当push_back调用时,存储一个长度为41的字符串,我必须对向量的每个元素进行操作并获得两个子字符串,第一个在0到28范围内,第二个在29到36范围内:
for(int i = 0; i < tokenTotals.size(); i++)
{
size_t pos = tokenTotals[i].find(": ");
cout << tokenTotals[i] << endl; // Show all strings - OK
cout << tokenTotals[i].length() << endl; // Lenght: 41
string first = tokenTotals[i].substr(0, 28); // OK
string second = tokenTotals[i].substr(29, 36); // ERROR
cout << first << " * " << second << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取第二个子字符串时,我收到以下错误:
terminate called after throwing an instance of std::out_of_range.
what():: basic_string::substr
Run Code Online (Sandbox Code Playgroud)
知道会发生什么事吗?
Visual Studio Debug 显示异常“矢量下标超出范围”(仅限调试模式),但我无法检测到它。没有错,这是选择排序算法。
源代码:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
void ascending_sort(vector<T> & list) {
size_t i, j, index;
for (i = 0; i < list.size() - 1; i++) {
index = i;
for (j = i + 1; j < list.size(); j++) {
if (list[j] < list[index]) {
index = j;
}
}
if (index != i) {
T item = list[i];
list[i] = list[j];
list[j] = item;
}
}
}
int main(int argc, char …Run Code Online (Sandbox Code Playgroud)