关于fsanitize
  • 板块学术版
  • 楼主Moeebius
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/5/21 11:15
  • 上次更新2023/10/28 00:59:12
查看原帖
关于fsanitize
356003
Moeebius楼主2022/5/21 11:15

RT,为什么这份代码在开了fsanitize=address,undefined之后会抽风:

AddressSanitizer:DEADLYSIGNAL
==========================================
==4119==ERROR: AddressSanitizer: stack-overflow on address 0x00016ccefa20 (pc 0x00010259b670 bp 0x000102c890f4 sp 0x00016ccefa00 T0)
    #0 0x10259b670 in main+0x78 (a:arm64+0x100003670)

SUMMARY: AddressSanitizer: stack-overflow (a:arm64+0x100003670) in main+0x78
==4119==ABORTING

不开sanitize时一切正常

code:

#include<bits/stdc++.h>
using namespace std;

#define il inline
#define For(i,j,k) for(int i=(j); i<=(k); ++i)
#define ForDown(i,j,k) for(int i=(j); i>=(k); --i)
template<typename T>
il void read(T &x)
{
	char c=getchar();
	int mul=1;
	while(!isdigit(c)) {if(c=='-')mul=-1;c=getchar();}
	x=0;
	while(isdigit(c)) {x=x*10+c-'0';c=getchar();}
	x*=mul;
}

int mod;

struct M
{
	int a[1001][1001],n;
	M(int __n=0) : n(__n) {memset(a,0,sizeof(a));}
	il void raw()
	{
		For(i,1,n) a[i][i]=1;
	}	
};


int n,m;


M F(M x)
{
	M res=x.n;
	For(i,1,n)
	For(j,1,n)
	{
		For(p,1,n)
			res.a[i][j]=(res.a[i][j]+x.a[i][p])%mod;
		For(p,1,n)
			res.a[i][j]=(res.a[i][j]+x.a[p][j])%mod;
	}
	return res;
}

M p;

signed main()
{
	// cerr<<"aaa\n";
	read(n),read(m),read(mod); 
	p=n;
	For(i,1,n) For(j,1,n) read(p.a[i][j]);
	while(m--){
		p=F(p);
	}
	For(i,1,n){
	For(j,1,n)
		printf("%d ",p.a[i][j]);
	puts("");
	}
	//cout<<"Hello world.";
	return 0;
}

environment

  • MacOS12.2
  • Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  • Target: arm64-apple-darwin21.3.0
  • Thread model: posix
  • 编译命令:
g++ a.cpp -o a -O2 -lm -std=c++17 -fsanitize=address,undefined && open a
2022/5/21 11:15
加载中...