我找不到这个问题的原因。
函数 getfruits 返回指向c样式字符串指针数组的指针。 Main尝试访问c风格的字符串。
using namespace System;
#pragma managed
void getfruits(char ***list, int* count)
{
char *txt[] =
{
"apple",
"orange",
"pears",
"banana",
};
*list = txt;
*count = 4;
}
#pragma managed
int main(array<System::String ^> ^args)
{
char **lst; int cnt;
getfruits(&lst,&cnt);
char *t; int i;
String^ s;
for (i=0; i<cnt; i++)
{
t = lst[i]; //t = <undefined value>
s = gcnew String(t);
Console::WriteLine("Fruit = {0}", s);
};
Console::ReadKey();
return 0;
}
但它得到 而不是指向c风格字符串的指针。
最终,
在arraysandclasses.exe中发生未处理的“System.AccessViolationException”类型异常
附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
出了什么问题?有人可以指出什么吗?如果复制和粘贴,代码应该简单地编译。提前谢谢。
答案 0 :(得分:1)
您已返回本地数组的地址并使用它。那是undefined behavior。 txt
具有自动存储持续时间,并在您离开getfruit
功能后立即销毁。但是你保留一个指针并使用它,但指向的内存不再包含一个活的对象。我建议您也许应该阅读good C++ book。