c++ - 在 C++ 中使用 delete 时出现段错误

标签 c++ linux pointers char constants

我在尝试删除指针(用于 char 数组)时遇到段错误。请帮我。我在这里做错了什么吗?请在下面找到代码片段和输出。

代码:

# include <iostream>
using namespace std;
int main()
{
        int *p = new int;
        const char* c = new char[100];
        c = " hello";
        *p = 10;
        cout << "c= " << c << "*p = " << *p << endl;
        delete p;
        delete c;
        c = NULL;
        p = NULL;
        return 0;
}

输出:

c=  hello*p = 10
Segmentation fault (core dumped)

编辑:

如果我不对字符数组使用 new 和 delete,是否是内存泄漏?我不能在我的代码中使用字符串,那么使用 const char* 变量的正确方法是什么?

提前致谢。

最佳答案

你在此处分配内存并将其分配给指针c

const char* c = new char[100];

但是然后您重新分配指针:

c = " hello";

这意味着您丢失了原始指针,现在 c 指向了您无法删除的文字字符串 "hello"

您应该改为 copy将字符串放入分配的内存中。

关于c++ - 在 C++ 中使用 delete 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22529370/

相关文章:

c++ - 构造动态对象时取消引用

c++ - 从 Qt 源代码树中编译 Qt 工具

c++ - 是否存在编译器无法诊断丢失返回的情况?

c++ - 使用指针在数组中首次出现元素 (C++)

c++ - 使用指针显示多维数组中的元素

c - 在结构中使用指针并在 C 中写入文件

c++ - `assert` 在循环中

node.js - 是否有任何标准警告(stdwarn),如 stdout 和 stderr?

c++ - 链接外部库时出错

c++ - 使用系统 ("./some_program"),如何在 "some_program"死亡时防止父进程终止?