【在C/C++中编写“指向某事物的指针”的好方法】教程文章相关的互联网学习教程文章

C++ 中判断非空的错误指针

最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的指针,这可能是接收数据不对应产生的问题解决思路如下:  1.对返回值长度进行判断,如果超过项目内最大的返回值就直接return(比如我项目内的最大返回值为5000,哪么我设定的值为10000);  2.对char指针进行判断,由于这里返回的数据是有的...

【c++程序】函数指针

#include<iostream> using namespace std; #include<cstring> void reset(int a[],int n); void input(int a[],int n); void output(int a[],int n); void sort(int a[],int n); int main() {void (*fp)(int a[],int n)=NULL;//相应的函数指针int x[5];fp=output;output(x,5);fp(x,5);fp=reset;fp(x,5);fp=output;fp(x,5); } void reset(int a[],int n) {memset(a,0,sizeof(int)*n);//设置内存中数据/*for(int i=0;i<n;i++)a[i]=0;...

深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)【代码】【图】

1. 几种智能指针1. auto_ptr: c++11中推荐不使用他(放弃)2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1;做到指针进行共享3. unique_ptr: 一个指针同时只能有一个使用者使用4. weaked_ptr: 与shared_ptr搭配使用1.1 weak_ptr参考:https://zh.cppreference.com/w/cpp/memory/weak_ptrstd::weak_ptr 是一种智能指针,它对被 std::shared_ptr 管理的对象存在 非拥有性(“弱”)引用。在访问所引用的对象前必须 先转换为 ...

paip.指针 引用 c++ java的使用总结.

paip.指针 引用 c++ java的使用总结. ///////////////一般一个变量包括下面的信息 a.地址(指针) b。命名(引用,别名) c.变量内容.. 指针是一个变量的地址,引用是一个变量的别名。 1. 指针是一个地址编号,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3.引用是操作受限了的指针(仅容许取内容操作)。 4.指针用操作符‘*’和‘->’,引用使用操作符‘.’ 5.指针是用来指向某个变量,而引用是给变量取...

C++指针函数和函数指针【代码】【图】

函数返回类型分为返回基本数据类型(指针函数)返回指针类型,返回的新指针指向返回值得地址 //指针函数不能返回局部量(函数内变量)的指针返回引用类型,直接返回返回值的地址 //引用函数不能返回局部量(函数内变量)的引用,不产生副本。返回引用比返回指针更直接,可读性更好函数的类型是指函数的接口,包括函数的参数定义和返回类型 如 函数double max(double,double);的类型是  double(double,double);  定义方法 ...

c++智能指针【代码】

1.shared_ptr使用引用计数的方法管理动态内存。1.1常用操作// 空的share_ptr shared_ptr<T> sp; // 用 make_shared 方法构造 shared_ptr<T> sp(make_shared<T>(args)); // 用 shared_ptr 构造 shared_ptr<T> sp1 = sp2; // 用内置指针构造。此构造函数是 explicit 的 shared_ptr<T> sp(q); // 释放时用可调用对象d代替delete shared_ptr<T, d> sp(q, d); // 赋值。递减sp1的引用计数(变为0则释放),递增sp2的引用计数 sp1 = sp2;//...

C++ 指向类的指针【代码】

一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。下面的实例有助于更好地理解指向类的指针的概念:#include <iostream>using namespace std;class Box {public:// 构造函数定义Box(double l=2.0, double b=2.0, double h=2.0){cout <<"Constructor called." << endl;length = l;breadth ...

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析,左值与右值【代码】

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析标签:STL 智能指针 auto_ptr 源码分析by 小威威1. 知识引入在C++编程中,动态分配的内存在使用完毕之后一般都要delete(释放),否则就会造成内存泄漏,导致不必要的后果。虽然大多数初学者都会有这样的意识,但是有些却不以为意。我曾问我的同学关于动态内存的分配与释放,他的回答是:”只要保证new和delete成对出现就行了。如果在构造函数中new(动态分配内存),那么在析构...

C++智能指针简单剖析【代码】

导读智能指针是行为类似于指针的类对象,所有的智能指针都会重载 -> 和 * 操作符。智能指针还有许多其他功能,比较有用的是自动销毁。这主要是利用栈对象的有限作用域以及临时对象(有限作用域实现)析构函数释放内存。当然,智能指针还不止这些,还包括复制时可以修改源对象等。智能指针根据需求不同,设计也不同(写时复制,赋值即释放对象拥有权限、引用计数等,控制权转移等)。智能指针是存储指向动态分配(堆)对象指针的类,...

C++智能指针 unique_ptr【代码】

C++智能指针 unique_ptr unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory (非memory.h)中, 命名空间为 std. 标准库早期版本中定义了 auto_ptr, 它具有 unique_ptr 的部分特征, 但不是全部, 例如, 不能在容器中保存 auto_ptr, 也不能从函数中返回 auto_ptr. 基于这些原因, 应该尽量使用 unique_ptr, 而不是 auto_ptr, 使用 unique_ptr 替换...

C++指针

一.指针定义  C++规定,存放地址的变量称为指针变量,变量的地址称为变量的指针。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。指针变量也是变量,只是指针变量存储的是变量的指针。指针变量存放的是变量的指针,在32位系统中指针的宽度为32位(即4字节),所以在32位系统中,指针变量的大小是4字节,无论是什么类型的指针变量。  一个指针变量有两个属性,一个是它的...

C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间【代码】【图】

先来看下面的例子:#include <stdlib.h> #include <string.h> #include <stdio.h>#pragma warning(disable:4996)typedef struct _Student {char name[64];int age;}Student;typedef struct _Teacher {char name[64];int age;char *p1;char **p2;Student s1;Student *ps1;}Teacher;int main() {Teacher t1;t1.age = 30;t1.s1.age = 20;// 操作结构体中的结构体指针t1.ps1->age = 100;system("pause");return0; }编译,没有问题,但是...

C++入门经典-例6.11-使用指针变量遍历二维数组【代码】【图】

1:代码如下:// 6.11.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <iomanip> usingnamespace std; void main() {int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int *p;p=a[0];for(int i=0;i<sizeof(a)/sizeof(int);i++){cout << "address:";cout << a[i] ;//在二维数组中a[i]代表每个元素的地址cout << " is " ;cout << *p++ << endl;} } /*sizeof:其作用就是返回一个对象或者类型所占的...

71. C++ 分别用指针数组和二维数组生成二维空间,存储数据并释放。 练习new/delete, new[]/delete[]【代码】【图】

分别用指针数组和二维数组生成二维空间,存储数据并释放。比如,数据如下: //使用了下fgetc() 1 #include <iostream>2 #include <stdio.h>3usingnamespace std;4 5 6int main()7{8#if 0 //生成二维数组存储 9 FILE* fp = fopen("G:\\qtcode\\temp.txt","r"); 1011//char buf[3][10] ={0};12char (*buf)[10] = newchar[3][10]; 1314int i,j,ch; 15for(i = 0;i<3;i++) 16 { 17for(j = 0;j<8;j++) 18 { 19 ...

c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)【代码】

一个简单的point坐标类 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y){} int x()const { return xval; } int y()const { return yval; } Point& x(int xv) { xval = xv; return *this; } Point& y(int yv) { yval = yv; return *this; }private: int xval, yval;};将handle 绑定到其上 进行一层封装通过handle控制那些操作可以公开 那些操作私有 阻止用户对point的地址的操作更重要的是提供...