首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

指针未更新其在void函数内指向的值

是指在一个void函数中,如果使用指针指向的变量的值发生了改变,但是没有更新指针指向的值。

在C或C++编程语言中,void函数是一种没有返回值的函数。当我们在void函数中使用指针来操作某个变量时,如果没有正确更新指针指向的值,可能会导致指针指向的值不是我们期望的结果。

这种情况可能会导致程序出现错误或者不可预料的行为。为了避免这种情况发生,我们需要在void函数中正确更新指针指向的值。

以下是一些可能导致指针未更新的常见情况和解决方法:

  1. 忘记使用指针解引用操作符()来更新指针指向的值。在使用指针操作变量时,需要使用解引用操作符()来获取指针指向的变量,并对其进行修改。例如:
代码语言:txt
复制
void updateValue(int* ptr) {
    *ptr = 10;  // 更新指针指向的值为10
}

int main() {
    int value = 5;
    updateValue(&value);  // 传递指向value的指针
    // 现在value的值为10
    return 0;
}
  1. 在void函数中创建了一个新的局部变量,并错误地将指针指向该局部变量。在void函数中创建的局部变量的生命周期仅限于该函数内部,一旦函数执行完毕,局部变量将被销毁。因此,如果将指针指向局部变量,并在函数外部使用该指针,将导致未定义的行为。为了避免这种情况,可以使用动态内存分配来创建堆上的变量,并将指针指向该变量。例如:
代码语言:txt
复制
void createDynamicValue(int** ptr) {
    *ptr = new int(10);  // 在堆上创建一个新的int变量,并将指针指向它
}

int main() {
    int* valuePtr = nullptr;
    createDynamicValue(&valuePtr);  // 传递指向valuePtr的指针
    // 现在valuePtr指向一个值为10的int变量
    delete valuePtr;  // 在不再需要时释放内存
    return 0;
}

总结起来,为了避免指针未更新其在void函数内指向的值的问题,我们需要注意在void函数中正确更新指针指向的值,并避免将指针指向局部变量。正确使用指针可以帮助我们在程序中正确地操作和传递数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

函数返回指向一个指针

create_array() 函数接收一个整数 n,然后动态分配了一个 n 个元素整型数组,将数组中每个元素初始化为其下标值,最后将指向数组指针作为函数返回返回。... main() 函数中,调用 create_array() 函数并将其返回指向一个整型指针 arr。然后,使用一个循环遍历数组每个元素,并打印出。最后,释放数组所占用内存空间。...int (*p)(int, int); 定义了一个名为 p 指向函数指针变量,这个函数返回类型是 int,有两个整型参数。这个函数指针可以指向一个具有相同返回类型和参数列表函数。... main() 函数中,将 p 指向 add() 函数,并调用它来完成加法操作,然后再将 p 指向 subtract() 函数,并调用它来完成减法操作。 函数里面的参数可以传递一个指针进来。...指针作为参数传递进函数时,实际上传递指针指向内存地址,函数可以通过指针来访问、修改指针指向内存中数据。 定义了一个名为 swap() 函数,它有两个参数,都是指向整型变量指针

65920

C++ this指针:用于成员函数指向调用该函数对象

C++中this指针是一个指向当前对象指针成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...成员函数,无需显式地传入this指针,编译器会自动将当前对象地址赋给this指针。...二、作为返回this指针 this指针可以作为返回返回。这种情况下,返回指向调用该函数对象指针。为了实现这个功能,需要将返回类型设置为类引用或指针类型。...函数内部,返回指向调用该函数对象指针。...四、总结 this指针C++中是一个非常重要概念,可以用来访问调用该函数对象,作为返回返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

19940

【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 | 函数中 间接修改 指针变量 | 函数中 间接修改 外部变量 原理 )

文章目录 一、直接修改 和 间接修改 指针变量 二、函数中 间接修改 指针变量 三、函数中 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 ---- 直接修改 指针变量...return 0; } 执行结果 : 二、函数中 间接修改 指针变量 ---- 函数 中 间接修改 指针变量 , 将 指向一级指针 二级指针 变量 , 传递到 函数形参 中 ,... 函数中 , 使用 * 符号 , 修改 二级指针 指向 一级指针 变量值 ; 注意 : 如果要 修改 一级指针 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量...函数外部 变量 , 必须传入 指向该变量 指针才可以 ; 代码示例 : #include #include /* * 函数中简介修改指针 */ void...三、函数中 间接修改 外部变量 原理 ---- 如果要 修改 一级指针 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量 , 不能修改一级指针变量值 ; 这是因为

20.9K10

【C++】C++ 引用详解 ③ ( 函数返回不能是 “ 局部变量 “ 引用或指针 | 函数 “ 局部变量 “ 引用或指针函数返回无意义 )

一、函数返回不能是 " 局部变量 " 引用或指针 1、引用通常做右 之前使用 引用 时 , 都是作为 右 使用 , 引用只 声明 同时 进行初始化时 , 才作为左 , // 定义变量 a...int a = 10; // 定义变量 a 引用 b int& b = a; 引用 声明 并 初始化 之后 , 就没有当过右 , 这是因为 引用 本质 是 指针常量 , 本身不可被更改 ;...int 为 0 就是成功 , int 为其它数值 , 就是错误码 ; 3、函数 " 局部变量 " 引用或指针函数返回无意义 如果 想要 使用 引用 或 指针函数计算结果 , 一般都是将..., 也就是 修改 地址 / 引用 指向 内存中数据 , 该操作可以修改 外部 main 函数变量值 ; 如果 想要 函数 中 , 返回一个 地址 / 引用 作为返回 , 这个 地址 /...引用 是 谁 , 如果 是 函数内部 栈内存 中创建 变量 地址 / 引用 , 那么 函数执行结束 , 返回时 , 该 栈内存直接被回收了 , 地址 / 引用 指向内存空间可能就是随机 ;

30720

读 《C Traps and Pitfalls》Record

语法 理解函数声明 调用首地址为0子例程 (void fun()), (* (void(*)())0 )(); // call void fun() // 声明指向上述fun指针 void (*...pfun)(); // 注意括号,void *rf(); 声明了返回void* 指针函数。...,决定加减时,实际增减内存地址 int *p0 = (int*)0x0000; char *p1 = (char*)0x0000; ++p0; ++p1; // p0 += 1; p1 +=...数组边界问题(左闭右开, 一些用变量去索引情况下,没有处理好,导致访问读取位置内容带来错误。) 提到这种不对称数学角度来说不优美,却给程序设计带来了一些简化。...assert_error(__FILE__, __LINE__) 可移植性缺陷 其他 static 1,函数变量,静态变量, 作用域限定在该函数“全局变量”, 函数退出也保存在内存,下次调用仍能使用该

63230

CC++内存管理-学习笔记

内存分配成功初始化 内存空间申请到后,缺省是未知,所以空间申请到后,不要嫌麻烦,即便是赋零也是不可省略。...”);//错误 } 说明:指针作为函数参数时,只能传入指针内存储地址,不能在子函数中修改改,但是能够修改该指针指向内存区间道理和一般变量参数是一样。...);//注意是&Str,是取了指针地址,而不是指针指向地址 Strcpy(Str, “hello”); Free(Str); } 说明:此方法中是使用指针本身地址对进行操作,修改了本身地址...,即将指针指向地址进行了修改。...野指针问题 “野指针”不是NULL指针,是指向不明指针。 “野指针”产生原因: 指针变量初始化:指针变量定义时指向是不明,需要初始化。

1K20

第 19 章 特殊工具与技术

第二步,编译器运行相应构造函数,以构造这些对象,并为传入初始。 第三步,对象被分配空间并构造完成,返回一个指向该对象指针。...*pdata; s = pScreen->*pdata; 因为数据成员一般情况下是私有的,不能直接获得数据成员指针。可以内部定义一个成员函数,另返回指向该成员指针。...嵌套类名字在外层类作用域中是可见,在外层作用域之外可见性由访问权限修饰符决定。嵌套类可以直接使用外层成员,无需对该成员名字进行限定。...与其他内置类型一样,默认情况下 union是初始化,可以使用一对花括号初始显式地初始化一个 union。如果提供了初始,则该初始被用于初始化第一个成员。...取地址运算符不能作用于位域,因此任何指针都无法指向位域。 直接处理硬件程序常常包含这样数据元素,它们由程序直接控制之外过程控制。例如,程序可能包含一个由系统时钟定时更新变量**。

80750

第 19 章 特殊工具与技术

第二步,编译器运行相应构造函数,以构造这些对象,并为传入初始。 第三步,对象被分配空间并构造完成,返回一个指向该对象指针。...*pdata; s = pScreen->*pdata; 因为数据成员一般情况下是私有的,不能直接获得数据成员指针。可以内部定义一个成员函数,另返回指向该成员指针。...嵌套类名字在外层类作用域中是可见,在外层作用域之外可见性由访问权限修饰符决定。嵌套类可以直接使用外层成员,无需对该成员名字进行限定。...与其他内置类型一样,默认情况下 union是初始化,可以使用一对花括号初始显式地初始化一个 union。如果提供了初始,则该初始被用于初始化第一个成员。...取地址运算符不能作用于位域,因此任何指针都无法指向位域。 直接处理硬件程序常常包含这样数据元素,它们由程序直接控制之外过程控制。例如,程序可能包含一个由系统时钟定时更新变量**。

72540

C++常见问题(三)——宏定义、const、static、sizeof相关实例

3.const修饰函数返回 4.const修饰类成员函数:任何不需要修改数据成员函数都应该使用const修饰,int GetCount(void) const; 例题4:const使用 int...,假若x初始化,那么x是一个随机数 a1=&c; //constint*左侧,用来修饰指针指向变量,即指针指向为常量。...//上述是修改指针a1本身,而不是指针指向内容。 *a1=1; //该命令是修改指针指向内容,是不允许。...} 第三部分 static变量 例题5: static作用 1.函数体内,一个被声明为静态变量函数被调用过程中维持不变。...2.模块,一个被声明为静态变量可以被模块所有函数访问,但是不能被模块外其它函数访问。 3.模块,被声明为静态函数只能被这一模块其它函数调用。即函数被限制声明它模块范围

1.3K100

一文读懂C语言与C++动态内存

2.栈上分配 执行函数时,函数局部变量存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器指令集中,效率很高,但是分配内存容量有限。...代码一:传入函数A( char *p )参数为字符型指针,在这个函数修改参数p时并不能真正修改实参,如: char *str = NULL; A(str); 执行完这两句后str仍然是NULL...,如果想改变指针,就得用二阶指针来完成。...代码二:函数A(void )中: char p[]="hello world"; return p; 其中p[]数组是函数A中局部变量,函数返回后,p就被释放掉了,str指向了一段无用内存区域...理解变量作用域是解决本题关键。 代码三:避免了代码一中问题,A参数是二阶指针,传入参数也是字符串指针指针,这样就可以函数A中改变字符串指针值了。

86210

C++学习总结1——几个基本概念

像pi这样,指向内存区域不确定或无意义指针称为“野指针”。 pf虽然经过了初始化,但指向是内存空间0位置,而不是指向一个float型变量内存区域,所以运行时会出错,如下所示: ?...对于初始化变量,除了用作赋值操作左操作数,用于其他用途都是没有意义。 系统默认初始化规则 所谓系统默认初始化规则,就是声明变量时进行初始化情况下,编译器对赋值一套规则。...对于内置类型和类类型,规则不同;对于函数内变量和函数外变量,定义规则也不同。 内置类型变量 内置类型指int,float,char和void等基本类型(C++中,string不是内置类型)。...全局变量保存在全局数据区,该区域变量在编译时会自动初始化;对于局部变量,系统启动时不会为开辟内存空间,只有当它所在函数被调用时,才栈中建立函数数据空间。变量如果没有显式初始化,则为随机。...类类型变量 对于类类型变量,不论函数还是函数外定义,只要有默认构造函数,则系统就会自动调用默认构造函数,如 #include using namespace std;

53220

指针(1)--对于指针基本概念介绍

test()返回一个指向局部变量n指针,然后main()函数中使用这个指针。...当一个指针指向对象被移动或者重新分配内存,但指针本身并没有被更新,也可能导致野指针出现。...(2)传调用 设想:通过调用函数来打印 调用中,函数参数被复制到函数形参中。这意味着函数内部对形参修改不会影响到实参。...(3)传址调用 设想:通过函数来交换 得到结果是: 原因就是,形参和实参都有自己独立空间,对于函数内部形参交换并不会影响到主函数实参变量改变。对形参影响是不会影响实参。...结果就是: 传址调用中,函数参数地址被传递给函数形参。这意味着函数内部对形参修改会影响到实参。 传递给函数是实参地址,函数内部对形参修改会影响到实参。

6710

第 12 章 动态内存

栈内存——定义函数非 static对象,当进入定义所在程序块时被创建,离开块时被销毁。 堆内存——存储动态分配对象,即那些程序运行时分配对象。...自由空间分配内存是无名,因此 new无法为分配对象命名,而是返回一个指向该对象指针。...int *pi = new int; // pi是一个指向动态分配初始化无名对象      默认情况下,动态分配对象是默认初始化,这意味着内置类型或组合类型对象将是未定义,而类类型对象将用默认构造函数进行初始化...void f() { shared_ptr sp(new int(42)); // 这段代码抛出一个异常,且 f中捕获 } // 函数结束时 shared_ptr自动释放内存...对数组中元素进行初始化,可以再大小之后跟一对空括号。与分配单个对象不同,分配数组对象,不能在圆括号指定初始。但是可以花括号提供元素初始化器,具体规则与使用大括号初始化内置数组类似。

1.4K40

《C++Primer》第十二章 动态内存

静态内存、栈内存和堆 我们前面只提到了静态内存或栈内存: 静态内存:用来保存局部static、类static数据成员和定义在任何函数之外变量 栈内存:保存定义函数非static对象 分配在静态内存或者栈内存对象由编译器自动创建和销毁...,我们为StrBlob定义了一个名为checkprivate工具函数,用于确定索引是否合法范围。...两种处理方法,方法一就是use_factory函数记得释放内存: void use_factory(T arg) { Foo *p = factory(arg); // 使用p...如果我们delete一个指向数组指针时忽略了方括号,或者delete一个指向单一对象指针时使用了方括号,行为是未定义。 3....,使用构造内存,行为是未定义

1.3K10

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。 不存在指向引用,必须有具体实体;但是存在指向指针。...虚函数是允许被子类重新定义成员函数。 可以实现用父类型别的指针指向子类实例,然后通过父类指针调用实际子类成员函数。...&a是数组指针类型为int (*)[10](就是前面提到数组指针),加1时,系统会认为是数组首地址加上整个数组偏移(10个int型变量),为数组a尾元素后一个元素地址。...若(int *)p ,此时输出 *p时,为a[0],因为被转为int *类型,解引用时按照int类型大小来读取。 23、虚函数与纯虚函数区别?...模块static全局变量可以被模块所用函数访问,但不能被模块外其它函数访问; 模块static函数只可被这一模块其它函数调用,这个函数使用范围被限制声明它模块类中

1.9K20

C++语言基础篇(二)

符号表⽣成之后就不会再改,因此指针可以改变指向对象(指针变量中 可以改),⽽引⽤对象则不能修改。...(补充:静态⾮常量数据成员,只能在类外定义和初始化,仅是声明⽽已。)...作⽤五: 类成员/类函数声明 static 函数体内 static 变量作⽤范围为该函数体,不同于 auto 变量,该变量内存只被分配⼀次,因此在下 次调⽤时仍维持上次模块 static...全局变量可以被模块所⽤函数访问,但不能被模块外其它函数访问; 模块 static 函数只可被这⼀模块其它函数调⽤,这个函数使⽤范围被限制声明它模块类中 static 成员变量属于整个类所拥有...this 指针来改变指向对象

57010

Redis技术知识总结之一——Redis 数据结构

dictEntry:Redis 给每个 key-value 键值对分配一个 dictEntry,里面有着 key 和 val 指针,next 指向下一个 dictEntry 形成链表,这个指针可以将多个哈希相同键值对链接在一起...属性同样大小使用空间,这时free和len属性相同。...随着对哈希表操作,键会逐渐增多或减少。为了让哈希表负载因子维持一个合理范围,Redis会对哈希表大小进行扩展或收缩(rehash)。...)(void *ptr); // 节点释放函数 void (*free)(void *ptr); // 节点对比函数 int (*match)(void *ptr,...从图中可以看出跳跃表主要有以下几个部分构成: 表头 head:负责维护跳跃表节点指针; 节点 node:实际保存元素,每个节点有一层或多层; 层 level:保存着指向该层下一个节点指针; 表尾

76630

【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

| ② 作用 : 释放 malloc 申请动态空间 | ③ 参数 : void *ptr 指针指向要释放内存首地址 | ④ 返回 : 没有返回 ) ( 4 ) calloc 函数 ( ① void...② 作用 : 释放 malloc 申请动态空间 | ③ 参数 : void *ptr 指针指向要释放内存首地址 | ④ 返回 : 没有返回 ) free 函数简介 : void free(void.... ebp 指针 : ebp 指针变量所在地址不重要, 讲解全过程中没有涉及到, 重要是 ebp 指向, 这个是随着 函数 入栈 出栈 一直变 ; ( 1 ) 入栈 : 将 ebp 指针指向地址...堆 ( 1 ) 标题3 堆 相关 概念 : 1.栈特性 : 函数执行开始时入栈, 函数执行完毕后, 函数栈要释放掉, 因此函数部分类型数据无法传递到函数外部 ; 2.堆 空间 : malloc..., 或者***② 进行了初始化, 但是超出范围使用***; 1.结构体成员指针初始化 : 结构体成员中 如果有指针, 那么这个指针使用时需要进行初始化, 结构体变量声明后, 成员变量值是随机,

1.6K40

【c++】vector模拟实现与深度剖析

,而Vector迭代器是一个原生指针,我们这里为定义别名iterator 私有成员: iterator _start; // 指向数据块开始 iterator _finish;...这意味着它指向结束后第一个元素,它用来表示存储vector中实际元素结束 _endOfstorage: 这个指针指向分配给vector内存块末尾。...push_back(*first) 循环体内部调用,这个函数应该是 vector 类中成员函数,它会添加解引用迭代器 first 指向的当前元素到 vector 末尾。...4 : capacity() * 2); // 如果扩容了要更新pos pos = _start + len; } 首先,记录pos到起始位置大小,更新后新start加上距离即可 C++标准模板库...如果容器插入新元素前还有足够capacity(使用预留空间),一般来说,除了指向插入点之后元素迭代器之外,其他迭代器、指针和引用会保持有效。

8110
领券