指向c风格字符串c ++ / cli的指针数组的指针

时间:2011-07-23 17:17:58

标签: pointers c++-cli cstring

我找不到这个问题的原因。

函数 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”类型异常

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

出了什么问题?有人可以指出什么吗?如果复制和粘贴,代码应该简单地编译。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您已返回本地数组的地址并使用它。那是undefined behaviortxt具有自动存储持续时间,并在您离开getfruit功能后立即销毁。但是你保留一个指针并使用它,但指向的内存不再包含一个活的对象。我建议您也许应该阅读good C++ book