美好的一天,
const char * t = new char[4];
const char * t2 = "Blo";
t = "Blu";
cout << t << endl;
const char *x = t;
delete [] t;
cout << t << endl;
t2 = "Ble";
cout << t2<< endl;
我目前正在测试指针和C-Strings如何删除工作。我发现删除实际上并没有删除已分配的内存,它只是告诉它不再需要它,所以我们在取消引用已删除的指针后会得到未定义的行为。 这是这种情况吗? “t”是否被隐含地取消引用? 根据我的理解,“t”本身指向c-string的起始地址(那么为什么在我打印t时打印值,如果不是因为它被隐式取消引用?)。 当我删除它后打印t时,它会给我与删除之前相同的数据。这是由未定义的行为引起的(因为t的隐式解除引用)还是有其他原因?
另外,我还需要删除t2吗?我用不同的方式写了两篇文章;只是语法不同,它们或多或少意味着相同的事情(除了最后的0字节)或那些是非常不同的? 如果我要删除的东西是用new创建的还是我还需要t2,我还需要删除 吗? x是t的副本,并且在删除t(或者更确切地说,未定义的行为)之后它的值是否存在,或者它是指向t的指针? 由于所有这些标志都有多重含义,我有点困惑。
感谢您的帮助,
Grougal。
答案 0 :(得分:3)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% int x = 1;%>
<c:out value="${x}" />
这与t = "Blu";
cout << t << endl;
const char *x = t;
delete [] t;
相同,显然不对。您只能delete [] "blu";
delete[]
。