首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

malloc分配的内存提示不能写入解决思路

2012-03-27 
malloc分配的内存提示不能写入用的devc++编译器,运行后出现下面的提示“0x00401361”指令引用那个的“0x00000

malloc分配的内存提示不能写入
用的devc++编译器,运行后出现下面的提示
“0x00401361”指令引用那个的“0x00000002”内存。该内存不能为“written”


下面是我的程序代码,要建立一个栈

#include <stdio.h>
#include <stdlib.h>

typedef struct
  {
  int *base;
  int *top;
  int stacksize;  
  }sqStack;
main()
{  
  int initstack(sqStack *stacks); 
  sqStack *one;
  initstack(one);
  }

int initstack(sqStack *stacks)
{
  stacks->base=(int *)malloc(1*sizeof(int));
  if(!stacks->base) exit(0);
  stacks->top=stacks->base;
  stacks->stacksize=100;  
   
  }



[解决办法]
one指针没初始化就用了,自然不行
[解决办法]
sqStack *one;未初始化

改成:

sqStack one;
initstack(&one);
[解决办法]
你调用int initstack(sqStack *stacks); 时,结构体还没有申请内存空间,指针指向的是个非法地址

[解决办法]
main()
{
int initstack(sqStack *stacks);
sqStack one;
initstack(&one);
}

这个函数进来的是一个指针,该指针执行的内存空间必须存在才行啊。
int initstack(sqStack *stacks)
{
stacks->base=(int *)malloc(1*sizeof(int));
if(!stacks->base) exit(0);
stacks->top=stacks->base;
stacks->stacksize=100;

}
[解决办法]
sqStack *one;本身就是一个指针,其指向的 sqStack对象,的对象。。。还没有被初始化。

sqstack还 占一定大小空间的。
[解决办法]
楼主:

int initstack(sqStack *stacks);
然后
stacks->base=(int *)malloc(1*sizeof(int));
这句不对,
main中的stacks传进来是各指针,没有被初始化。
所以,应该是:
stacks=(struct sqStack*)malloc(1*sizeof(struct sqStack));

另外结束前最后别忘了释放内存哦。
还有:
stacks->stacksize=100;
你是想说你的堆栈深度是100么?不过到目前这里只分配1个哦,如果是要100的话你应该分配100个上面的空间。
[解决办法]
首先的sqStack *one new一个对象出来啦。。。
[解决办法]
你只是申请了指针, 指针本身的内存是分配了。
但是指针指向的struct sqStack的内存你还没有分配
要么:
int initstack(sqStack *stacks);
sqStack one;//这样就分配了struct sqStack的内存
initstack(&one);

或者
int initstack(sqStack *stacks);
//这样也分配了struct sqStack的内存
//one 指向了这段内存
sqStack *one = (struct sqStack *)malloc(sizeof(struct sqStack));
initstack(one);
[解决办法]
int initstack(sqStack *stacks)
{
//也就是说这个stacks压根就没内容, 指向了不可写地址, 你想修改就不行
stacks->base=(int *)malloc(1*sizeof(int));
if(!stacks->base) exit(0);
stacks->top=stacks->base;
stacks->stacksize=100;
}

热点排行