标题:关于内存管理的问题,
只看楼主
Mycr
Rank: 1
等 级:新手上路
帖 子:203
专家分:0
注 册:2006-9-18
 问题点数:0 回复次数:6 
关于内存管理的问题,
#include <stdio.h>
#include <string.h>
void main()
{
    char a[]="hello";
    int len=strlen(a);
    char *p;
    p=new char;

    strcpy(p,a);
    if(strcmp(p,a)==0)
        printf("相同\n");
    while(*p!='\0')
    {
        printf("%c",*p);
        p++;
    }
    //printf("%d",len);
    if(p)
        delete p;

}

为什么我添加上红色那段代码后,程序就会出错

[[italic] 本帖最后由 Mycr 于 2007-12-24 15:32 编辑 [/italic]]
搜索更多相关主题的帖子: 内存 char printf include len 
2007-12-24 15:30
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
得分:0 
不明白你的程序要实现什么。
2007-12-24 15:57
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
p=new char;
这一句申请了一个字节的内存,然后p指向了这段内存

strcpy(p,a);
这一句把a复制给p,实际上已经是越界了,a要占6个字节,而p指向的位置只有一个字节是向系统申请来的,虽然整个程序是可以运行的,但是这一句是错误的.

    while(*p!='\0')
    {
        printf("%c",*p);
        p++;
    }
这一段,p直至在自增,已经指到了不是向系统申请的空间

 if(p)
        delete p;
这个时候p指向的位置不是原来申请的位置,所以会出错

修改方法为:
    char *p;
    p=new char;
这两句改为
    char *p,*q;
    q=p=new char[len+1];
还有
    if(p)
        delete p;
改为
    if(q)
        delete q;

多定义一个q,指向申请内存的位置,最后把q给delete掉就行了.
c语言中的指针使用要相当的小心,很多地方一不小心就越界了

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-12-24 16:09
灭火的风
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:161
专家分:10
注 册:2006-6-15
得分:0 
为什么要多定义一个指针q啊?
2007-12-24 20:54
Mycr
Rank: 1
等 级:新手上路
帖 子:203
专家分:0
注 册:2006-9-18
得分:0 
想了解内存的管理,所以写了这样一段代码进行测试.   多定义一个q ,是因为q是指向初始地址,而p使用的时候,已经移动后面去了
内存是地雷,不想踩到,唯一的办法就是将它移除!

[[italic] 本帖最后由 Mycr 于 2007-12-25 19:58 编辑 [/italic]]

2007-12-25 19:50
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
原帖由 [bold][underline]灭火的风[/underline][/bold] 于 2007-12-24 20:54 发表 [url=http://bbs.][/url]
为什么要多定义一个指针q啊?

因为我想不到更好的办法~

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-12-25 19:58
Mycr
Rank: 1
等 级:新手上路
帖 子:203
专家分:0
注 册:2006-9-18
得分:0 
那我的理解有没有对?

2007-12-25 19:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-194059-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.171137 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved