标题:内存不能为写
取消只看楼主
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
 问题点数:0 回复次数:5 
内存不能为写

小弟初学,遇到这个问题,执行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
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
得分:0 
我是用C-FREE3.5啊,晕死了。
今天好郁闷啊,一个全局变量在一个函数中可以赋值,到了另外一个函数又变成内存不能为READ
2006-03-09 20:29
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
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
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
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
得分:0 
斑竹教训的是,今天受益非浅啊,我要是个女的一定嫁给你  哈哈  可惜不是
2006-03-10 13:29



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




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

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