buffer overflow detected错误

最近在写并行程序的时候遇到这个问题,在上网查询之后发现好多是由于sprintf的缓冲区不够造成的,对比自己程序发现一个很低级的错误

char *sc = new char(100);
sprintf(sc, "%d", rank);
string temp = sc;
string str = "./read_time/read_time" + temp;
ofstream fread_time(str.c_str());
fread_time << static_cast(duration) / static_cast(1000) << "ms" << endl;
delete sc;

应该写成

char *sc = new char[100];

之前在自己单机上调试并没有出现问题,在服务器上暴露出来一直以为是服务器的问题,后来发现这个小错误,但是很奇怪的是为什么在本机的编译器上调试是显示正确的呢?即使如此访问越界都不提示出错,

int *t = new int;
cout << *(t+1000) << endl;
这跟具体编译器的实现有关,编译器保证不一定正确,但是不能保证一定不正确,所以不要太相信编译器


类似的问题(以下都是错误的做法,只不过某些时候不会提示出错,记住

你可能感兴趣的:(C/C++,C++)