为什么使用CStdioFile的时候,关闭文件有时会报错?

时间:2022-08-08 23:46:45
为什么使用CStdioFile的时候,close关闭文件有时会报错?


有时不报,有时报,受不了啦,求指导啊~

9 个解决方案

#1


今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费解啊。。。

#2


引用 1 楼 yujiefei0309 的回复:
今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费……

操作同一个文件没有互斥么?

#3


引用 2 楼 sduxiaoxiang 的回复:
引用 1 楼 yujiefei0309 的回复:今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在……

嗯,互斥啊,报错了。这还好理解,难理解的是,我前面stdiofile打开的文件,后面close的时候报错,是不是中间走到其它的线程里去了呢?还有就是在同一个函数里,前面new的内存,中间使用sprintf操作后,后面delete,机会报错,难理解。。。

#4


引用 3 楼 yujiefei0309 的回复:
引用 2 楼 sduxiaoxiang 的回复:引用 1 楼 yujiefei0309 的回复:今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delet……

代码贴出来瞧瞧

#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那里有问题,不知道为什么

#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;
}

#8


引用 7 楼 sduxiaoxiang 的回复:
#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;
}


高手~
哪里越界了啊?

#9


为什么使用CStdioFile的时候,关闭文件有时会报错?

#1


今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费解啊。。。

#2


引用 1 楼 yujiefei0309 的回复:
今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在不同的线程里。一个进程一个堆,一个线程一个栈,费……

操作同一个文件没有互斥么?

#3


引用 2 楼 sduxiaoxiang 的回复:
引用 1 楼 yujiefei0309 的回复:今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delete就会出错,好像是因为new和delete操作在……

嗯,互斥啊,报错了。这还好理解,难理解的是,我前面stdiofile打开的文件,后面close的时候报错,是不是中间走到其它的线程里去了呢?还有就是在同一个函数里,前面new的内存,中间使用sprintf操作后,后面delete,机会报错,难理解。。。

#4


引用 3 楼 yujiefei0309 的回复:
引用 2 楼 sduxiaoxiang 的回复:引用 1 楼 yujiefei0309 的回复:今天发现,在写日志文件的时候,两个线程走的是同一段代码,创建和访问同一个文件,报错提示sharevolution error好像是共享空间错误,猜测是两个线程访问文件冲突造成的。怀疑之前的stdiofile关闭的时候报错也是类似情况,之前也出现过前面new的内存,后面delet……

代码贴出来瞧瞧

#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那里有问题,不知道为什么

#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;
}

#8


引用 7 楼 sduxiaoxiang 的回复:
#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;
}


高手~
哪里越界了啊?

#9


为什么使用CStdioFile的时候,关闭文件有时会报错?