gpt4 book ai didi

c++ - 方法范围外取消引用的 char[] 指针的有效性

转载 作者:行者123 更新时间:2023-11-28 00:02:41 25 4
gpt4 key购买 nike

我的嵌入式系统 (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++ 如何处理引号之间的那些东西 :)

最佳答案

除了您的代码片段不能是真实 测试用例这一事实(因为A 没有名为remember() 的成员函数), 您向我们展示的内容从根本上没有错。您正在存储一个指向字符串文字的指针,而字符串文字将永远存在。

但是,您的编译器应该警告您将其存储为 const char* — 实际上自 2011 年以来不这样做是非法的。

很可能你正在破坏这个文字占用的内存,如果没有 MCVE,我们无法知道如何。 也许,在您添加了缺少的 const 之后,您的编译器可以为您捕捉到您的错误。但这绝不是保证。

此外,不要忘记 main 的返回类型。

关于c++ - 方法范围外取消引用的 char[] 指针的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com