- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 C 程序编译并正常工作,直到我从 main() 调用此函数
void rearrangeMainDiagonal(int mat[MAX_ORDER][MAX_ORDER], int order)
{
int i, j, k=0, l=0, n=0;
int temp[20], odd_temp[20], even_temp[20];
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
temp[k] = mat[i][i];
k++;
}
}
for(i=0;i<=k;i++)
{
if(temp[i]%2==0)
{
even_temp[l] = temp[i];
l++;
}
else
{
odd_temp[n] = temp[i];
n++;
}
}
for(j=0;j<=n;j++)
{
temp[j] = odd_temp[j];
}
for(i=0;i<=l;i++,j++)
{
temp[j] = even_temp[i];
}
k=0;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
mat[i][i] = temp[k] ;
k++;
}
}
}
当我运行该程序时,会弹出一条消息,显示“程序已停止工作”。请关闭该程序。当我尝试逐步执行它时,它显示“程序中出现访问冲突”并停止。包含行“temp[j] = odd_temp[j];”的“for 循环”会弹出错误。
最佳答案
当您的程序尝试访问未分配给该程序的内存时,就会发生段错误。
段错误的最常见原因(除了取消引用 NULL 指针)是访问超出其范围的数组。
f.ex:
int arr[5];
for (int i=0; i<=5; i++)
arr[i]=i;
将抛出段错误,因为您访问 arr
的第 5 个元素它不存在(因此您尝试访问其后面未分配给您的内存。
程序中的多个位置都可能发生这种情况。
void rearrangeMainDiagonal(int mat[MAX_ORDER][MAX_ORDER], int order)
{
int i, j, k=0, l=0, n=0;
您创建了固定大小的数组,但在使用它们时从不检查索引。如果我所有其他调整都是正确的,那么最好使用:
int temp[MAX_ORDER], odd_temp[MAX_ORDER], even_temp[MAX_ORDER];
并强制订单低于或等于 MAX_ORDER:
assert(order <= MAX_ORDER);
根据函数名称我怀疑这是
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
temp[k] = mat[i][i];
k++;
}
}
这需要 temp
成为order*order
尺寸;
应该更像
for(i=0;i<order;i++)
{
temp[i] = mat[i][i];
}
因此将 temp
中的每个元素放在主对角线上一次数组现在应该只是 order
尺寸
在这里你循环温度直到 k
'th 元素,您没有在上述循环的版本中设置该元素,因为您在赋值后确实增加了 k所以你应该循环直到 k-1
所以使用i<k
而不是i<=k
;
for(i=0;i<=k;i++)
应该变成(在上面的循环中进行更改之后);
for(i=0;i<order;i++)
{
if(temp[i]%2==0)
{
even_temp[l] = temp[i];
l++;
}
else
{
odd_temp[n] = temp[i];
n++;
}
}
再次n
odd_temp
的第 ' 个元素未设置,使用j<n
for(j=0;j<n;j++)
{
temp[j] = odd_temp[j];
}
再次l
even_temp
的第 ' 个元素未设置,使用i<l
for(i=0;i<l;i++,j++)
{
temp[j] = even_temp[i];
}
这里发生了与第一个循环相同的错误。这应该变成:
for(i=0;i<order;i++)
{
mat[i][i] = temp[i];
}
}
现在您还可以删除变量 k,因为它未使用,并且如果该函数仍然执行您希望它执行的操作,那么它应该能够处理阶数高达 MAX_ORDER
的矩阵。
关于c - 'An Access Violation (Segmentation Fault) raised in your program'是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15681269/
我正在为学校做作业。该代码应该从文件中读取并创建一个数组,然后对数组的值进行排序以输出某些信息。只要我在文件中有 3 行以上的信息,它就可以正常工作。如果没有,我会收到以下错误: First-chan
在我的表中,我有一个唯一的约束。在 hibernate 中,当我添加一个违反该约束的项目时,我想捕获它,因此它将更新而不是创建一个项目。 当我没有设置 try-catch block 时 up
我正在尝试将 Excel 文件中的一些数据插入到表中。我有两个excel文件如下: Test2: 5/12/2012 5/18/2012 ABQ ANC 1 52 5/12/2012
我有自定义约束: @Target({FIELD, METHOD}) @Retention(RetentionPolicy.RUNTIME) @ConstraintComposition(Composi
“违反任何时间序列”和“违反所有时间序列”这两个选项有什么区别?我可以想象前者会轻松做什么,但我不知道后者会做什么。 所有时间序列?它的射程有多长?为什么它有一个 for 选项? 最佳答案 What'
我正在尝试初始化 DataEditor 的对象,我的DataEditor类(class)工具interface IDataEditor where T : IEditableObject . Data
我正在使用带有 java 插件 4.0 和 findbugs 插件 3.4.3 的 SonarQube 5.6。使用此配置,findbugs 报告的外部类违规不会被报告为 Sonar 违规。以下是代码
我正在使用 DbUnit 框架对我的 JPA 实体 bean 进行单元测试。我已经从数据库表生成了实体。还将 DB 数据导出到 xml 文件中,DbUnit 在执行测试时可以使用这些文件。 但是对于每
我写了这段简单的代码来动态分配一个 4 维数组: #include #include int**** alloc() { int i,j,k; int ****matrix;
我的 Java 程序出现问题。我使用 MS Access 作为数据库,并使用 UCanAccess 连接到数据库。 当我尝试将文本插入数据库时,出现异常: net.ucanaccess.jdbc.
我正在尝试使用埃拉托斯特尼筛法解决 SPOJ 的 PRIME1 问题。该代码对于较小的整数工作正常,但对于长整数显示以下错误 - "Unhandled exception at 0x770d15ee
我不明白这个案例,但这对我来说真的很重要,请帮助我... void __fastcall TForm1::Button4Click(TObject *Sender) { String masu
请看我的代码: adj = (int *)calloc(n * n, sizeof(int)); scanf("%d", &m); for (i = 0; i < m; i++) { scan
下面这段代码有什么问题以及如何修复它。 #include using namespace std; template class guard{ public: guard(Func1 firs
我有一个多线程 C# 应用程序,它创建文件,打开它们进行处理,然后在完成后删除它们。此应用程序可以预期处理 1 - 100 个文件。有点随机(很可能归因于应用程序的多线程性质)当我尝试在处理后删除文件
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
是否有可能在出现段错误后恢复 C 程序的正常执行流程? struct A { int x; }; A* a = 0; a->x = 123; // this is where segmenta
在 Magento 中使用信用卡/借记卡下订单时出现以下错误: Order saving error: SQLSTATE[23000]: Integrity constraint violation:
我正在处理属于 SDK 一部分的文件。当我在 phpstorm 中将文件提交到 svn 时,我收到关于 Unused definition SomeFunction 的警告,其中 SomeFuncti
简而言之,我有一个 C# 应用程序执行大量 mciSendString 调用(通过 dllimport)来控制 wav 文件播放(本质上是打开、播放、暂停、停止、状态、关闭)。运行一段时间后,应用程序
我是一名优秀的程序员,十分优秀!