【发布时间】:2015-11-16 15:33:28
【问题描述】:
我是 C++ 新手(我通常使用 Java),我正在尝试将 ::CORBA::LongSeq 对象转换为 C++ 中的 long *,以便之后对其执行操作。
所以基本上,我尝试的是这样做:
long * Sample (const ::CORBA::LongSeq& lKeys) {
long nbElts = lKeys.length();
long * lCles = NULL;
for(int iIndex = 0; iIndex < nbElts; iIndex++) {
lCles[iIndex] = (long) lFCKey[iIndex];
}
return lCles;
}
发生的情况是我可以检索 lKeys 的长度(所以它应该在正确的位置,据我所知),但是当我收到访问冲突异常时我进入 for 循环。
0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF
虽然我不确定我做错了什么......有人有想法吗?
【问题讨论】:
-
1) 返回指向局部变量的指针是未定义的行为。 2)你的指针是NULL。你希望用 NULL 指针做什么?
-
看起来像一个无效的指针
-
I'm new to C++ (I usually work on Java),但是您错过了指针管理的基本原理。使用std::vector<long>而不是long *。然后所有这些变成一两行。 -
@PaulPicard 您正在访问一个 NULL 指针。不管是读还是写。但最重要的是,您的代码试图将数据填充到指向......我们不知道的指针中。这就是问题所在。让它指向一个足够大的缓冲区来保存数据。
-
@PaulPicard
because all the treatment is done afterwards in CC++ 没有范围解析运算符,但您的函数原型有。因此,凭直觉,它肯定看起来不像是从 C 模块调用的。