c++ 指针指向常量字符串和作为函数的形参

本文深入探讨了编程中常见的指针问题,包括空悬指针和野指针的概念及其潜在风险。详细解释了指针指向常量字符串时的注意事项,以及在动态内存分配时如何避免错误。提供了正确的内存分配和初始化示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

空悬指针:它曾经指向一个有效地址,但是现在不再指向有效地址,就是原来的那块地址不能通过这个指针区访问了。这通常是因为指针所指的内存单位被释放了并且不再有效了。空悬指针存在并没有什么问题,除非你尝试通过这个指针访问指向的地址空间。不遗留任何悬空指针总是最好的实践方式。(被free或者delete后,需要申明 *p=NULL)
野指针:它没有被正确的初始化于是指向一个随机的内存地址。存在野指针是一个严重的错误
 

1.指针指向常量字符串

#include <stdio.h>
int main()
{
    char *p="ABC";
    p[0]='B';//c++有警告warning: ISO C++ forbids converting a string constant to 'char*' ,

//常量字符串不能被修改,运行时程序出错。
    return 0;
}

2.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define max(a,b) a##b
void wrong(char *p)
{
    p=(char *)malloc(100*sizeof(char));
}
void right(char **p)
{
    *p=(char*)malloc(100*sizeof(char));
}
void test()
{
    char *p=NULL;
    //wrong(p);//并没有申请成功
    right(&p);//申请成功
    //memset(p, 0, sizeof(char)*100);//不可用sizeof(p) 指针只有4个字节
    p[0]='A';
    p[1]='B';
    //memset(p,0,sizeof(p));
    printf("%s\n", p);//输出会有垃圾值,原因是没有还原申请内存原来存在的数据,调用memset
}
int main()
{
    test();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值