| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1212 人关注过本帖
标题:内存不能为写
只看楼主 加入收藏
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
 问题点数:0 回复次数:13 
内存不能为写

小弟初学,遇到这个问题,执行exps[1]='f';时候出现内存无法写入的提示。能告诉我这是为什么吗?谢谢了~~
#include "stdio.h"
#include "stdlib.h"
int main()
{
char *exps;
exps=(char *)malloc(sizeof(char));
exps="63369";
exps[1]='f';
printf("%c\n",exps[1]);
}

[此贴子已经被作者于2006-3-9 20:04:10编辑过]

搜索更多相关主题的帖子: 内存 
2006-03-09 20:04
舍得
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-3-8
收藏
得分:0 
我运行后输出'f'呀,用的是win-tc
2006-03-09 20:23
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
我是用C-FREE3.5啊,晕死了。
今天好郁闷啊,一个全局变量在一个函数中可以赋值,到了另外一个函数又变成内存不能为READ
2006-03-09 20:29
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
以下是引用farmerbee在2006-3-9 20:04:00的发言:

小弟初学,遇到这个问题,执行exps[1]='f';时候出现内存无法写入的提示。能告诉我这是为什么吗?谢谢了~~
#include "stdio.h"
#include "stdlib.h"
int main()
{
char *exps;
exps=(char *)malloc(sizeof(char));
exps="63369";
exps[1]='f';
printf("%c\n",exps[1]);
}


你用malloc才分配了一个字节的内存空间 exps[1]越界了

exps=(char *)malloc(sizeof(char)); →exps=(char *)malloc(10*sizeof(char)); 分配多少你自己定


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-09 22:19
sunnvya
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1094
专家分:0
注 册:2005-11-23
收藏
得分:0 
函数头都掉了加个(猪头.H)

http://www. 第二站>>>提供源码下载
2006-03-09 22:23
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
以下是引用feng1256在2006-3-9 22:19:00的发言:

你用malloc才分配了一个字节的内存空间 exps[1]越界了

exps=(char *)malloc(sizeof(char)); →exps=(char *)malloc(10*sizeof(char)); 分配多少你自己定

既然才分配了一个字节的空间,那么exps="63369";这个赋值不是不能完成了吗?
#include "stdio.h"
#include "stdlib.h"
void main()
{
char * p;
p=(char *)malloc(sizeof(char));
p="hello world!!";
printf("%s",p);
}
结果: hello world!!
#include "stdio.h"
#include "stdlib.h"
void main()
{
char * p;
p="hello world !!";
printf("%s",p);
}

结果还是一样,可以解释一下吗?

2006-03-10 12:20
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用farmerbee在2006-3-9 20:04:00的发言:

小弟初学,遇到这个问题,执行exps[1]='f';时候出现内存无法写入的提示。能告诉我这是为什么吗?谢谢了~~
#include "stdio.h"
#include "stdlib.h"
int main()
{
char *exps;
exps=(char *)malloc(sizeof(char));
exps="63369";
exps[1]='f';
printf("%c\n",exps[1]);
}


这个程序在 for dos( 实模式系统)是可以的,for windows (保护模式)是不可以。

exps="63369";//exps指向的内存在保护模式下是不可更改的

所以,TC编译是可以的,而你用的是32位编译器是不行的。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-03-10 12:42
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
我用的是C-FREE 3.5 WINDOW的吗?那那在保护模式下

void main()
{
char * p;
p="hello world !!";
printf("%s",p);
}
这样可以吗?请问这样和没有使用MALLOC函数的区别是什么?
2006-03-10 12:57
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
可以。内存区间不一样。说得通俗一点"hello world !!";是“只读内存”。malloc分配的是“读写内存”

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-03-10 13:04
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 

终于知道问题出在哪里了,谢谢啊!!不过还有。。
void main()
{
char * p;
p= (char *)malloc(2*sizeof(char));
p="hello word";
p[0]='a';
p[1]='r';
printf("%s",p);
}
意思就是要经过MALLOC 分配后的内存才能写,那么这里p[0] p[1]两个空间应该是经过分配的,为什么不能写呢?

2006-03-10 13:14
快速回复:内存不能为写
数据加载中...
 
   



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

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