【发布时间】:2015-01-29 13:59:28
【问题描述】:
我正在尝试从 C# 项目调用本机 C++ 代码。为此,我按照this post 中的步骤操作。
但是当我在 C++ 文件中创建一个巨大的数组时,我得到了一个 stackoverflow 异常。代码如下:
//CSharpTest.h
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpTest
{
class Program
{
static void Main(string[] args)
{
CpTest.Class1 instance = new CpTest.Class1();
Console.WriteLine(instance.DoSomething());
Console.ReadKey();
}
}
}
还有 c++ 文件
// CpTest.h
#pragma once
using namespace System;
namespace CpTest {
public ref class Class1
{
public:
int DoSomething(){
int arr[640 * 480];
return 123;
}
// TODO: Add your methods for this class here.
};
}
数组声明导致stackoverflow异常。
早些时候,当我只运行本机 C++ 代码时,我通过增加项目属性中的“堆栈保留大小”来增加堆栈大小。
但对于这种情况,我不知道该怎么办。
【问题讨论】:
-
必须在栈上分配数组吗?
-
不一定。但我不知道该怎么做。
-
您的“本机 C++”实际上是 C++/CLI,即 Microsoft 针对 .Net 互操作的 C++ 扩展。我已经删除了 C++ 标签并添加了 c++-cli。
-
在堆上分配数组,或者最好使用
std::vector。在堆栈上分配如此大的数组通常不是一个好主意。 -
@odyss-jii 感谢您的帮助