【发布时间】:2016-06-06 14:54:54
【问题描述】:
我的嵌入式系统 (Arduino) 上有一个损坏的 char[],我怀疑有一部分代码。这是代码(好吧,我试图将其概念化,我没有尝试编译您阅读的内容)。 基本上,问题是:我可以在方法范围之外存储指向“abcde”对象的指针吗(我不知道如何命名“abcd”,它是 char 的常量数组吗?)
class A {
public:
void store(char *ptr_char) {
m_ptr=ptr_char;
}
void useit() {
// is *m_ptr valid here ?
printf("%s",m_ptr);
}
private :
char *m_ptr;
}
class B : A {
void remember() {
store ("string to remember");
}
}
main () {
B obj;
obj.remember();
obj.useit();
}
我观察到 *m_ptr 内存损坏,“要记住的字符串”在实际代码中已损坏(内存中的其他对象)。 我的 C 个人记忆告诉我,保留对未分配对象的引用是无效的。我相信在 remember() 方法执行期间“要记住的字符串”在堆栈上,但没有保证在 remember() 退出后可用,对吧?
整件事是:我不知道 C++ 如何处理引号之间的那些东西 :)
【问题讨论】:
-
此代码有效,因为字符串文字存储在静态位置,但这似乎不是一个好习惯。
-
obj.remember();无法编译。 -
另外,如果你想接受字符串文字,那么你应该使用
const char *而不是char *。