| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2109 人关注过本帖
标题:编译过了 运行老说某处内存不能为read
取消只看楼主 加入收藏
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:7 
编译过了 运行老说某处内存不能为read
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode
{
        int data;
        struct Lnode *next;
}LinkList;
/***************************************************/
//函数申明
void InitList(LinkList *L);
void ListCreat(LinkList *L,int n);
//本地变量
LinkList *ListHead;

int main(int argc, char *argv[])
{
  ListCreat(ListHead,8);
  system("PAUSE");   
  return 0;
}
void ListCreat(LinkList *L,int n)
{
     LinkList *p;
     int i,j=0;
     InitList(L);
     printf("Begin to input data!!\n");
     printf("you gonna creat an list which have %d int data\n",n);
     for(i = n;i>0;--i)
     {
           p = (LinkList *)malloc(sizeof(LinkList));
           p->data = i;
           p->next = L->next;
          L->next = p;
     }
}     
     
void InitList(LinkList *L)
{
     printf("Initialization Begin!\n");
     printf("sizeof(Lnode)=%d\n",sizeof(LinkList));
     L = (LinkList *)malloc(sizeof(LinkList));
     L ->next = NULL;
     printf("Initialization End!\n");
}
搜索更多相关主题的帖子: 内存 申明 include system return 
2011-11-24 16:23
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
注:
报错情况为"0x00401342"指令引用的“0x000000004”内存。该内存不能为“read”


后来发现是我在for循环中引用了malloc,哪位大侠能帮忙看看,感激不尽
2011-11-24 16:28
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 

跪求死因
2011-11-24 16:31
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
回复 4楼 TonyDeng
这样用有什么不妥?
该怎么改?
2011-11-25 11:02
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
回复 5楼 embed_xuel
好像不是吧!语法没错的,应该是内存分配问题
2011-11-25 11:03
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
回复 9楼 TonyDeng
书上的代码 从线性表最后一个数据开始分配,直到分配n个数据
您的意思是说不该在for循环中改变p的值对吗?
还是用malloc就只能一个萝卜一个坑

如果要改的话该怎么改法
2011-11-26 12:03
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
回复 20楼 mfh
谢谢 收到了 你很棒
2011-11-28 14:33
at445
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2011-6-14
收藏
得分:0 
以下是引用mfh在2011-11-26 17:16:33的发言:

#include
#include
typedef struct Lnode {
    int data;
    struct Lnode *next;
} LinkList;
/***************************************************/
//函数申明
void InitList(LinkList **L);//KEY
void ListCreat(LinkList *L, int n);
void ShowList(LinkList *L);
//本地变量
LinkList *ListHead = NULL;
int main(int argc, char *argv[]) {
    ListCreat(ListHead, 8);
    system("PAUSE");
    return 0;
}
void ListCreat(LinkList *L, int n) {
    LinkList *p;
    LinkList *head;
    int i, j = 0;
    InitList(&L);
    head = L;
    printf("Begin to input data!!\n");
    printf("you gonna creat an list which have %d int data\n", n);
    for (i = n; i > 0; --i) {
        p = (LinkList *) malloc(sizeof(LinkList));
        p->data = i;
        p->next = L->next;
        L->next = p;
    }
    ShowList(L);
}
void InitList(LinkList **L) {
    printf("Initialization Begin!\n");
    printf("sizeof(Lnode)=%d\n", sizeof(LinkList));
    *L = (LinkList *) malloc(sizeof(LinkList));
    //**L ->next = NULL;
    printf("Initialization End!\n");
}
void ShowList(LinkList *L)
{
        LinkList *p;
        p =L ->next;
        while(p != NULL)
        {
                fprintf(stderr,"number = %d\n",p->data);
                p =p ->next;   
        }
      
      
}
只是我想不明白这与原来的差距就只有InitList中使用了一个指针的指针,为什么会出现两种不同的情况,我原来那个到底错在哪儿?
2011-11-28 14:50
快速回复:编译过了 运行老说某处内存不能为read
数据加载中...
 
   



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

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