有时不报,有时报,受不了啦,求指导啊~
9 个解决方案
#1
今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费解啊。。。
#2
操作同一个文件没有互斥么?
#3
嗯,互斥啊,报错了。这还好理解,难理解的是,我前面stdiofile打开的文件,后面close的时候报错,是不是中间走到其它的线程里去了呢?还有就是在同一个函数里,前面new的内存,中间使用sprintf操作后,后面delete,机会报错,难理解。。。
#4
代码贴出来瞧瞧
#5
内网代码传不出来。。。
#6
#include "iostream"
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char;
sprintf(p,"%s",a);
cout<<p<<endl;
delete p;
return 0;
}
我自己写的一段,在delete那里有问题,不知道为什么
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char;
sprintf(p,"%s",a);
cout<<p<<endl;
delete p;
return 0;
}
我自己写的一段,在delete那里有问题,不知道为什么
#7
#include "iostream"
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char[100];////
sprintf(p,"%s",a)////越界
cout<<p<<endl;
delete p;
return 0;
}
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char[100];////
sprintf(p,"%s",a)////越界
cout<<p<<endl;
delete p;
return 0;
}
#8
高手~
哪里越界了啊?
#9
#1
今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费解啊。。。
#2
操作同一个文件没有互斥么?
#3
嗯,互斥啊,报错了。这还好理解,难理解的是,我前面stdiofile打开的文件,后面close的时候报错,是不是中间走到其它的线程里去了呢?还有就是在同一个函数里,前面new的内存,中间使用sprintf操作后,后面delete,机会报错,难理解。。。
#4
代码贴出来瞧瞧
#5
内网代码传不出来。。。
#6
#include "iostream"
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char;
sprintf(p,"%s",a);
cout<<p<<endl;
delete p;
return 0;
}
我自己写的一段,在delete那里有问题,不知道为什么
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char;
sprintf(p,"%s",a);
cout<<p<<endl;
delete p;
return 0;
}
我自己写的一段,在delete那里有问题,不知道为什么
#7
#include "iostream"
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char[100];////
sprintf(p,"%s",a)////越界
cout<<p<<endl;
delete p;
return 0;
}
using namespace std;
int main()
{
char* a = "this is a test!";
char* p = new char[100];////
sprintf(p,"%s",a)////越界
cout<<p<<endl;
delete p;
return 0;
}
#8
高手~
哪里越界了啊?