指针删除操作 指针赋值 错误

问题描述

指针删除操作 指针赋值 错误

#include "stdafx.h"
#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int *p,*q;
p = new int[10];
p[0] = 2;
p[1] = 1;

cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
delete []q;  //为何删除时出现bug,if:q=p,things will be all right?
return 0;

}

解决方案

delete 指针实际上释放了指针所指的堆内存,但指针本身是一个32位(在32位机器上)的无符号整数。其值是对象的首地址,这个值并没变。也就是说,你用delete后,不但指针任然存在,而且其内容都没有变换。他本身的释放在超过他生命周期的时候销毁。然而现在指针所指的内存已经不可用了,再次操作其内容将会发生内存错误(比如再次delete)。所以,安全的做法是让指针值等于NULL
cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
q = NULL;
delet []q;
return 0;

解决方案二:

new和delete是成对的。当p=q是,delete q相当于delete p;这个和new p就成对了

时间: 2024-12-29 09:55:39

指针删除操作 指针赋值 错误的相关文章

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

利用二级指针删除单向链表——笔记

今天看到这篇Linus:利用二级指针删除单向链表,作个笔记. 关于在单向链表中删除一个指定的节点,通常有两个易错点. 找到指定节点删除时,忘了备份这个节点里指向下一个节点的指针. 没有特殊处理删除第一个节点的情况.   01 //通常的写法 02 typedef struct node 03 { 04     struct node * next; 05     .... 06 } node; 07    08 typedef bool (* remove_fn)(node const * v)

Linus:利用二级指针删除单向链表

感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding. 下面是Linus的教学原文及翻译-- "At the opposite end of the spectrum, I actually wish more people under

c语言-关于字符指针数组,如何赋值?

问题描述 关于字符指针数组,如何赋值? int main() { char *a[2]={"abc","bcd"} scanf{ }; printf{ }; return 0; } 请问在scanf中输入什么代码赋值,替换"abc"abc 解决方案 指针常量不行.你得这么写 char * p= new char[100]; scanf("%s", p); 解决方案二: 字符指针数组字符数组与字符指针字符型指针数组变量定义与赋值

c++声明结构体指针变量提示没有构造函数错误

问题描述 c++声明结构体指针变量提示没有构造函数错误 ##在OJ中做题 ###题目描述 输入一个链表,从尾到头打印链表每个节点的值. 我的代码: // struct ListNode { // int val; // struct ListNode *next; // ListNode(int x) : // val(x), next(NULL) { // } // }; class Solution { public: vector<int> printListFromTailToHead

c语言-关于C语言指针的操作问题

问题描述 关于C语言指针的操作问题 代码: include main(){ int a = 3 ; int b = 4 ; int *p1 ; int *p2 ; p1 = &a ; p2 = &b ; printf("%dn",p1); printf("%dn",p2); int c ; c = p1 - p2 ; printf("%dn",c); } 运行结果: 2293304 2293300 1 Process exited

template-c++模板类包含typedef 指针函数,vs2012编译错误

问题描述 c++模板类包含typedef 指针函数,vs2012编译错误 #include "stdafx.h" #include<stdexcept> #ifndef ToozyBinaryTreeHead #define ToozyBinaryTreeHead template <class T> class ToozyBinaryTree{ public: typedef bool (*findFunc)(typename const ToozyBinar

指针问题-二维指针不能操作一维数组的原因是什么?

问题描述 二维指针不能操作一维数组的原因是什么? int array_test[3]={1,2,3}; int ** ptr; *ptr = array_test;//本句出错 printf("%lun",ptr); 出错行已经标注,为什么这种方式会出错,二维指针为什么不能操作一维数组?欢迎大家踊跃发表看法~

数组与指针的操作

/* ============================================================================ Name : TestArray.c Author : lf Version : Copyright : Your copyright notice Description : 数组与指针的操作 1 数组的基本知识 2 数组当做参数传递的问题 数组当做参数传递的时候,传递的是数组的指针 因为: 1 数组的拷贝很耗费资源.为了避免这种情况,