求助,关于指针

t0h 2005-01-24 05:11:34
char* p = (char*)malloc(sizeof(char*));
char* q = (char*)malloc(sizeof(char*));
scanf("%s",p);
scanf("%s",q);
while(*p != '\0')
{
cout<<*p;
p ++;
}
cout<<endl<<sizeof(p)<<endl;
cout<<endl<<sizeof(q)<<endl;
//free(p);
//free(q);

以上代码,分配4字节内存,但是实际上付值为长度超过4字节的字符串也可以(但长度超过30个字符以后,*p就读不到了)
但是一旦长度超过4字节 free就会报错

想请问:
1:指针是指向内存的一个点,还是一个区域?
2:我删除自己的4个字节内存为什么会报错?
...全文
137 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
winstonch 2005-01-24
  • 打赏
  • 举报
回复
笔误,没有n就是p
t0h 2005-01-24
  • 打赏
  • 举报
回复
To:winstonch()
pn是什么啊?
winstonch 2005-01-24
  • 打赏
  • 举报
回复
1.指针指向的是一个区域的头地址,当然是只在p = (char*)malloc(sizeof(char*));之后,如果在以后用对这个指针赋值了就不一定了,不过你也可以理解为指向一个区域(实际上也是一个区域),但是,如果不是当初申请的地址的头地址,在free的时候就会出错。

2.如上所述,你的pn已经不指向你申请内存的头地址了
goodluckyxl 2005-01-24
  • 打赏
  • 举报
回复
指针指向一个具体地址
但是可以管理一片有效空间

你录入超过4个字节内容越界
修改了分配信息
导致free问题
t0h 2005-01-24
  • 打赏
  • 举报
回复
还想请问,保存指针的内存是什么样的?
比如字符串是 'a''b''d''\0'

pcboyxhy 2005-01-24
  • 打赏
  • 举报
回复
这个指针是相当危险的。
因为C的灵活性
这类潜在错误是不会指正的
要求程序员本身功底深厚
suyouxin 2005-01-24
  • 打赏
  • 举报
回复
不明白楼主想证明什么, 明知道是错的

oo 2005-01-24
  • 打赏
  • 举报
回复
1:指针是指向内存的一个点,还是一个区域?
指针本身是指向一个点

2:我删除自己的4个字节内存为什么会报错?
你覆盖了你不该覆盖的内存中的内容(内存管理的一些信息),free的时候就会出错。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧