[问题] 回传过大的物件会有问题吗

楼主: Zero0910 (みくに最高≧▽≦)   2017-04-13 17:40:28
开发平台(Platform): (Ex: Win10, Linux, ...)
windows 7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC 6.0
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
我呼叫一个class的function回传一个大size的struct member
辅助程式会出现stack overflow
喂入的资料(Input):

预期的正确结果(Expected Output):
回传struct
错误结果(Wrong Output):
Stack Overflow
程式码(Code):(请善用置底文网页, 记得排版)
struct B1
{
int pp[300000];
};
class A1
{
public:
B1 b1;
B1 GetB1(){return b1;}
};
补充说明(Supplement):
class里面有一个很大的struct member : b1
呼叫A1.GetB1()取得此struct member
单纯用VC去编没事, 不呼叫A1.GetB1()也没事
但我用检查内存的辅助程式时
只要有呼叫A1.GetB1()就会出现stack overflow
这代表实际上回传大size是会有问题的吗?
作者: FrozenMoment   2017-04-13 18:00:00
何不回传指标或参考?
作者: james732 (好人超)   2017-04-13 18:09:00
那个pp在回传的时候会被copy吗?
作者: jerryh001   2017-04-13 18:43:00
回2楼 return by value 所以会复制整个阵列
作者: s4300026 (s4300026)   2017-04-13 19:13:00
签名档好熟悉啊...好奇问一下,如果array摆在外面,没被封装起来,可以使用吗?
作者: longlongint (华哥尔)   2017-04-13 20:24:00
作者: Sidney0503 (Sidney0503)   2017-04-14 03:00:00
十三诫 10 请看置底文
作者: TeaEEE (爱不趴 不爱趴)   2017-04-14 08:44:00
VC6的静态阵列不要超过65536
作者: Sidney0503 (Sidney0503)   2017-04-14 12:12:00
new和malloc出来的东西在heap所以用pointer传address你需要了解C语言和process的内存行为

Links booklink

Contact Us: admin [ a t ] ucptt.com