繁体   English   中英

如何在 C++ 中导出 .stl

[英]how to export .stl in c++

我想将网格(软体)导出为 .stl 格式。我使用了以下代码。请帮助我对这些东西不熟悉。

const CHAR* fileName = "D:\\Images\SCREENE.stl" ;
FILE* file = fopen(fileName,"rb");
unsigned char *buffer=0;
unsigned char *temp=0;

buffer[0]= (const char)"#vertices:\n  #indices\n";
for(int i = 1 ; i < softWorld->getSoftBodyArray().size(); i++) 
{
   buffer=(unsigned char*)softWorld->getSoftBodyArray()[i];

}
fwrite(buffer, sizeof(unsigned char), softWorld->getSoftBodyArray().size(), file);

fclose(file);

有一些问题,都与指针有关,会导致未定义的行为

让我们从这个开始:

buffer[0]= (const char)"#vertices:\n  #indices\n";

在这里,您获取一个指向字符串文字的指针,并告诉编译器将此指针视为单个字符,并将其分配给buffer[0] ,此时它是一个空指针。 取消引用空指针会导致未定义的行为,并且很可能是导致崩溃的原因。

但这并不是你做的唯一坏事。 让我们来看看这个:

buffer=(unsigned char*)softWorld->getSoftBodyArray()[i];

从你的代码来看, softWorld->getSoftBodyArray()可能返回一个std::array或一个std::vector对象。 这意味着您从该数组或向量中获取一个元素,并将其转换为指针并将其存储在buffer 再次出现未定义行为的情况,因为单个字符(我假设)不是指向某物的指针。 您也可以在循环中执行此操作,每次迭代都会丢失先前的分配。 虽然这不会导致崩溃,但是你会这样做

fwrite(buffer, sizeof(unsigned char), softWorld->getSoftBodyArray().size(), file);

这里的buffer不是一个有效的指针。 取消引用这个无效的指针也是未定义的行为可能会导致崩溃。


您的代码还有其他令人怀疑的地方,例如您为什么使用旧的 C 文件输入/输出函数而不是 C++ 流?

您还以二进制模式打开此文件,这表明您将二进制数据写入文件,但您似乎还想写入一些文本(我只是在这里猜测,我对文件格式一无所知)。

最后,您想写入文件,但您以只读模式打开它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM