| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 497 人关注过本帖
标题:内存不能读
只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
收藏
已结贴  问题点数:20 回复次数:4 
内存不能读
#define LONG 100
int integer_1,integer_2;
void ReplaceString(char*source,char*text,char*result);
void RemoveString(char*source_1,char*result_1,int l);
int FindString(char*source_1,char*text_1);
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
main()
{
char buf_1[LONG],buf_2[LONG],buf_3[LONG];
gets(buf_1);
gets(buf_2);
gets(buf_3);
integer_1=strlen(buf_1),integer_2=strlen(buf_2);
ReplaceString(buf_1,buf_2,buf_3);
return 0;
}
void ReplaceString(char*source,char *text,char*result)
{
int l;
l=FindString(source,text);
if(l==-1)
exit(1);
RemoveString(source,result,l);
}
int FindString(char *source_1,char*text_1)
{
int i,j=0,lomp=0;
for(i=0;i<integer_1;i++){
if(*(source_1+i)==*(text_1+j))
j++;
else
j=0;
if(j==integer_2){
lomp=1;
break;
}
}
if(lomp==1)
return i;
else
return -1;
}
void RemoveString(char*source_1,char*result_1,int l)
{
char *message;
message=(char*)malloc(l);
strncpy(message,source_1,l);
*(message+l)='\0';
message=(char*)realloc(message,strlen(message)+strlen(result_1)+1);
strcat(message,result_1);
message=(char*)realloc(message,strlen(message)+integer_1-integer_2-l+1);
strcat(message,source_1+l+integer_2);
free(message);
puts(message);
}
为什么这个程序会导致内存不能够读呢?
搜索更多相关主题的帖子: 内存 
2009-11-18 12:01
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:4 
free(message);
puts(message);

最后两句让我有点不懂,为什么先释放内存再输出呢?这样内存肯定不能读了···没有调试··不知道有没有其它问题,不过希望LZ能将代码的功能说一下,
我初看了下,不知道干嘛用的,这样会给想帮你的人带来不必要的时间开销,当然可能是我比较愚钝点···不过说明下也是LZ的举手之劳吧···
2009-11-18 20:27
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
#define LONG 100
int integer_1,integer_2;
void ReplaceString(char*source,char*text,char*result);
void RemoveString(char*source_1,char*result_1,int l);
int FindString(char*source_1,char*text_1);
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
main()
{
    char buf_1[LONG],buf_2[LONG],buf_3[LONG];
    gets(buf_1);
    gets(buf_2);
    gets(buf_3);
    integer_1=strlen(buf_1),integer_2=strlen(buf_2);
    ReplaceString(buf_1,buf_2,buf_3);
    return 0;
}
void ReplaceString(char*source,char *text,char*result)
{
    int l;
    l=FindString(source,text);
    if(l==-1)
        exit(1);
    RemoveString(source,result,l+1);
}
int FindString(char *source_1,char*text_1)
{
    int i,j=0,lomp=0;
    for(i=0;i<integer_1;i++){
        if(*(source_1+i)==*(text_1+j))
            j++;
        else
            j=0;
        if(j==integer_2){
            lomp=1;
            break;
        }
    }
    if(lomp==1)
        return i;
    else
        return -1;
}
void RemoveString(char*source_1,char*result_1,int l)
{
    char *message;
    message=(char*)malloc(l+1);
    strncpy(message,source_1,l);
    *(message+l)='\0';
    message=(char*)realloc(message,strlen(message)+strlen(result_1)+1);
    strcat(message,result_1);
    message=(char*)realloc(message,strlen(message)+integer_1-integer_2-l+2);
    strcat(message,source_1+l+integer_2);
    puts(message);
    free(message);
}
2009-11-18 20:50
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:4 
我看明白一点楼主的意思..输入3个字符串..第一个函数是来判断1 2里的字符相同到第几个。。
 然后返回一个值l..下一个就是.把第一个字符串比如说message=strncpy(1,3,( l 个数开始复制)),
然后从新分配内存..
把message里就有个字符串.然后把1+到message后面。不知道我理解对不对?
     int i,j=0,lomp=0;
    for(i=0;i<integer_1;i++){
        if(*(source_1+i)==*(text_1+j))
            j++;
        else
            j=0;
        if(j==integer_2){
            lomp=1;
            break;
        }
    }
    if(lomp==1)
        return i;
    else
        return -1;
          不过有点不明白第1个函数这里的判断有什么意义.

[ 本帖最后由 xy4919961 于 2009-11-18 21:13 编辑 ]

QQ群:96348241
2009-11-18 21:11
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:4 
有时侯也是操作系统的问题,我们运行ring 3上的程序有权限限制
除非你能先于windows启动,要突破权限的话
好像什么杀毒软件 雨过天晴 SoftICE 都是这么做的吧
2009-11-19 18:47
快速回复:内存不能读
数据加载中...
 
   



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

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