进程以状态 -1073741571 终止(0 分钟、3 秒)
Process terminated with status -1073741571 (0 minute(s), 3 second(s))
构建此代码后,我收到此错误:进程以状态 -1073741571(0 分钟、0 秒)终止。那么我应该怎么做才能解决这个问题呢?
我正在使用代码::块 16.01。我已经尝试了很多次,但总是收到此错误。但是如果这段代码在 Ideone 上运行,那就没关系了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct matrix
{
ll val[3005][3005];
ll row, col;
};
matrix operator * (matrix a, matrix b)
{
matrix res;
if(a.col != b.row)
return res;
for(ll i = 1; i <= a.row; i++)
for(ll j = 1; j <= b.col; j++)
for(ll k = 1; k <= a.col; k++)
res.val[i][j] = res.val[i][j] + a.val[i][k] * b.val[k]
[j];
res.row = a.row; res.col = b.col;
return res;
}
matrix a,b,c;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>a.row>>a.col>>b.row>>b.col;
for(ll i = 1; i <= a.row; i++)
for(ll j = 1; j <= a.col; j++)
cin>>a.val[i][j];
for(ll i = 1; i <= b.row; i++)
for(ll j = 1; j <= b.col; j++)
cin>>b.val[i][j];
c = a * b;
for(ll i = 1; i <= c.row; i++)
{
for(ll j = 1; j <= c.col; j++)
cout<<c.val[i][j]<<" ";
cout<<endl;
}
return 0;
}
非常感谢您的帮助!
正如之前的一些评论所提到的,您很可能在这里遇到堆栈溢出问题。 线程的默认堆栈大小取决于平台,因此您的代码在某些环境中会导致崩溃,但在其他环境中工作是有道理的。
解决此问题的一种可能方法是在启用地址清理器的情况下运行它。 例如(我在"main.cc"中有您的代码):
$ g++ main.cc
$ ./a.out
Segmentation fault
$ g++ -fsanitize=address main.cc
$ ./a.out
ASAN:DEADLYSIGNAL
=================================================================
==224881==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc3567b098 (pc 0x5586c57fe932 bp 0x7ffc39b5fd40 sp 0x7ffc3567b0a0 T0)
#0 0x5586c57fe931 in main (~/a.out+0x2931)
#1 0x7fddf00c052a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2352a)
#2 0x5586c57fe509 in _start (~/a.out+0x2509)
SUMMARY: AddressSanitizer: stack-overflow (~/a.out+0x2931) in main
==224881==ABORTING
仅出于教育目的(我不建议实际这样做),如果我们手动增加堆栈限制,我们可以观察您的程序工作。 在 Linux 上,如果我们插入
struct HackRunBeforeMain {
HackRunBeforeMain() {
// See http://man7.org/linux/man-pages/man2/getrlimit.2.html
// Not checking any errors to keep the example simple.
struct rlimit rlim;
getrlimit(RLIMIT_STACK, &rlim);
// Set the current thread's stack size to 1GB!
rlim.rlim_cur = 1024 * 1024 * 1024;
setrlimit(RLIMIT_STACK, &rlim);
}
};
HackRunBeforeMain hack_run_before_main;
在您的程序中,运行它不会导致段错误(至少在我的机器上)。
对于长期修复,您应该考虑确保每个matrix
的数据都在堆上,而不是堆栈上。 您可以通过malloc
、new
或std::make_unique<T>
等工具完成此操作。 修改原始程序以执行此操作留给提问者作为练习。
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- Boost::posix_time::ptime舍入到给定的分钟数
- 填孔方法需要20分钟以上
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 提升,以分钟精度获得 UTC 时间
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 进程以状态 -1073741571 终止(0 分钟、3 秒)
- C++ 进程以状态 -1073741510 终止(0 分钟、2 秒)