2 herojia 1 herojia_1 于 2013.09.01 12:48 提问

C语言中通过指针能不能知道它在内存中的分配方案

例如char* pstr;
有几种方式:
pstr = "123";
char s[] = "123";
pstr = s;

pstr = (char*)malloc(4);
pstr[0] = '1';
pstr[1] = '2';
pstr[2] = '3';
pstr[3] = '\0';

那么,如何通过pstr判断它是哪种方式的?

1个回答

cx1468059916
cx1468059916   2013.09.02 20:57

这两种的结果都是一样的不必纠结,只有数组和指针在分配的时候是不同的,

http://blog.csdn.net/cxroom/article/details/10339635

cx1468059916
cx1468059916 可以看下这篇文章http://blog.csdn.net/hc260164797/article/details/7563301
接近 5 年之前 回复
herojia_1
herojia_1 我纠结之处在于:malloc分配方式下是动态的,可以自己释放;全局静态“123”只能系统释放,是静态的;数组也是静态的,不能自己释放。有时候,我们只能得到指针,而又想判断是不是malloc分配的,若是便free,否则不free。这样,我们就需要通过指针判断是否为malloc分配的,不然free便会是程序崩溃。大神,有没有解决方案哟?
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言内存与指针总结
指针:一般来说是一个其数值为地址的变量。 与指针相关的运算符: &:变量的地址 *: 得到地址中的值 比如:int a=2; p=&a 指向a的指针 n=*p 将p指向的值赋值给n。1、计算机内存中用二进制存储数据。1、计算机为什么用二进制表示数据: 计算机最小的单位是字节:1Byte=8bit;也就是说一个字节是8个二进制位。 我们使用的是电子计算机,
C语言指针应用——内存分配和释放
#define POINTER_MAX_SIZE S8* pointer = NULL;/pointer = malloc(POINTER_MAX_SIZE);if(NULL!=pointer ){    free(pointer);    pointer = NULL;} 说明
C语言,指针与内存分配
指针变量与内存分配 1. char * str1; //str1 只是一个指针,指针指向的空间还没有分配,所以此时用strcpy向str1所指向的内存 中拷贝内容将出错。利用malloc动态分配指向的内存(在堆中): str1=(char *)malloc(10) or str1=(char *)malloc(sizeof(char) *num)//分配num个char 所占有的字节(一
C语言中为指针的指针动态分配内存空间的做法
前言:本人在学习数据结构的过程中,遇到了散列这种数据结构,在使用分离链表发构建散列的过程中,需要用到为指针的指针动态分配内存空间,所以本人写了一个C语言的Demo程序来先测试这一行为问题如图#include "stdafx.h" //输出数组测试 void PrinT(int *p,int size){ for (size_t i = 0; i < size; i++) {
C语言指针的内存分配和Java中的引用
核心内容:  1、C语言指针的核心知识点  2、处理指针相关问题的万能措施—-内存分配图  3、C语言的指针是如何过渡到Java中的引用的 最近一段时间一直在学习C语言的指针,也算是颇有心得吧,虽然从网上看了几篇关于指针的博文,但是感觉都不符合自己的口味,于是决定好好写一篇关于指针的文章。  C语言指针的核心知识点:  1、指针就是地址,地址就是内存单元的编号,范围是0到4G-
C语言中给指定的内存地址赋值(通过指针)
应用中的实际问题:通过I2C接口发送到MCU一个地址数据(unsigned char AdData),一个待写入数据(unsigned char DaData)。 希望将DaData的值写到MCU内存地址为AdData的寄存器当中。代码如下:   unsigned char * pReg; // 创建一个指针变量 pReg = (unsigned char *) AdData; // 将
c语言动态内存分配之正确使用指针
#include #include #include //正确使用指针 void test002() { int len = 25; //pi指向申请内存的指针不要动,保留内容位置 后面好释放 int *pi = malloc( sizeof(int)*len); int *tempPi = pi; int i = 0; //只移动tempPi即可
指针和内存分配一个最基本理解
本次笔记主要是针对指针的动态内存分配和 内存分配的机制做一个简单的感悟,最后的蓝色字体是我自己的感悟,如果您看到这块,恳请您指出我的错误。感谢!!
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
队列---C语言实现---三种内存分配方式
转自:http://myswirl.blog.163.com/blog/static/51318642201183025254801/ 队列是一种先进先出的结构。 排队就是一种典型的队列。首先轮到的是排在队伍前面的人,新入队的人总是排在队伍的最后。 队列的实现比堆栈要难得多。它需要两个指针,一个指向队头,一个指向队尾。 同时 ,数组并不像适合堆栈那样适合队列的实现,这是由于队列使用内存的方