当我们使用未初始化的内存指针时,会导致程序无法进行,因为指针并没有指向一个合法的地址,这时候其内部存的只是一些乱码。所以在调用函数时,会使用乱码所指的内存,指针根本就无权访问,导致出错。
看一段代码

#include<stdio.h>
void getvalue(float x, float y, float* sum); //计算两个浮点数的和
int main()
	float a, b;
	float* sum;
	scanf_s("%f%f", &a, &b);
	getvalue(a, b, sum);
	return 0;
void getvalue(float x, float y, float* sum)
	float sum1;
	sum1 = x + y;
	sum = &sum1;
	printf("两者之和是%.2f\n ", *sum);

会出现
调用函数getvalue时,其中的指针sum指向的是乱码,函数就无法正确进行
解决办法是为指针动态分配内存,之后再将其释放
看代码怎么解决

#include<stdio.h>
void getvalue(float x, float y, float* sum);
int main()
	float a, b;
	float(*sum) = malloc(100);  //为指针summ动态分配内存;
	scanf_s("%f%f", &a, &b);
	getvalue(a, b, sum);
	free(sum);    //用完动态内存之后记得将其释放,不然会造成内存的泄露
	return 0;
void getvalue(float x, float y, float* sum)
	float sum1;
	sum1 = x + y;
	sum = &sum1;
	printf("两者之和是%.2f\n ", *sum);

成勋能够成功运行
博客记录成长

当我们使用未初始化的内存指针时,会导致程序无法进行,因为指针并没有指向一个合法的地址,这时候其内部存的只是一些乱码。所以在调用函数时,会使用乱码所指的内存,指针根本就无权访问,导致出错。看一段代码#include&lt;stdio.h&gt;void getvalue(float x, float y, float* sum); //计算两个浮点数的和int main(){ float a, b; float* sum; scanf_s("%f%f", &amp;a, &amp;b); g
C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” 4. 引用没有 const,指针有 const,const 的指针不可变;5. 引用不能为空,指针可以为空;6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;type
二、常见的错误有几种: 1)内存分配成功,却使用了它 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,使用内存之前检查指针是否为Null。 如果指针p是函数的参数,那么在函数的入口处用assert(p != NULL)进行检查。如果使用malloc或new来申请内存,应该用if(p == NULL)或if(p != NULL)进行放错处理。 2)内存分配虽然成功,但是尚初始化就引用它 犯这种错误主要有个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(eg. char
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,构造函数减少引用计
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言内存分配了解的太少。 问题不能拖,我这就来学习一下吧,争取一次搞定。在任何程序设计环境及语言中,内存管理都十分重要。 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手。现在有一个简单的C源程序hello.c 1 #include <stdio....