| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6297 人关注过本帖
标题:新手求助!运行C语言程序时,出现该内存不能为“written”!是哪里出问题? ...
取消只看楼主 加入收藏
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
新手求助!运行C语言程序时,出现该内存不能为“written”!是哪里出问题?谢谢!
以下程序编译没问题,运行时出现“0x77c160b4”指令引用的“0x00000010”内存。该内存不能为“written”。反复检查代码,不知道哪里出错!还是其他原因?希望好心人帮忙解答!
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define   BUF_LEN      101
#define   CAP            5

int main(void)
{
    char buf[BUF_LEN];
    bool sorted = false;
    unsigned int count = 0;
    char *pTemp = NULL;
   
    unsigned int capacity = CAP;
    char *pS = (char*)calloc(capacity, sizeof(char));
    if(!pS)
    {
        printf("内存不足!\n");
        return 1;
    }
   
    printf("这是可以读入任意个英语谚语,并将它们以字长顺序由短到长地输出的程序!\n");
    printf("最后以 END 为结束标志!\n");
    printf("注意:输入的每条英语谚语不超过 %d 个字节(包括空格、标点符号),不然会少一截!\n", BUF_LEN - 1);
   
    while(true)
    {
        char buf[BUF_LEN] = "\0";
        
        printf("请输入第 %u 条英语谚语(按 Enter 结束输入):\n", count + 1);
        printf("\t%u>.\t ", count + 1);
        fgets(buf, BUF_LEN, stdin);
        
        if(strcmp(buf, "END\n") == 0)
          break;
         
        else
        {
            pS[count] = (char*)malloc(BUF_LEN);
            if(!pS[count])
            {
                printf("申请内存不成功!\n");
                return 2;
            }
            
            strcpy(pS[count], buf);
            ++count;
        }
        
        if(count == capacity)
        {
            capacity += CAP;
            pTemp = (char*)realloc(pS, capacity * sizeof(char));
            if(!pTemp)
            {
                printf("没有分配内存!\n");
                return 3;
            }
            
            pS = pTemp;
        }
    }
   
    while(!sorted)
    {
        sorted = true;
        
        int i = 0;
        for(i = 0; i < count - 1; ++i)
        {
            if(strlen(pS[i]) > strlen(pS[i + 1]))
            {
                sorted = false;
                pTemp = pS[i];
                pS[i] = pS[i + 1];
                pS[i + 1] = pTemp;
            }
        }
    }
   
    printf("\n以下是将你输入的英语谚语以字长由短到长的输出!\n");
   
    int j = 0;
    for(j = 0; j < count; ++j)
    {
        printf("\t%d>.\t%s\n", j + 1, pS[j]);
        free(pS[j]);
        pS[j] = NULL;
    }
   
    free(pS);
    pS = NULL;
   
    return 0;
}

[此贴子已经被作者于2017-3-27 08:05编辑过]

2017-03-26 12:13
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 3楼 renkejun1942
那怎么修改?才学C语言。

还在学习过程中,欢迎指教!
2017-03-26 12:22
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 5楼 renkejun1942
我试了,程序还是出现该内存不能为“written”!应该不是这里问题吧。我书上也是这样释放内存。

还在学习过程中,欢迎指教!
2017-03-26 12:40
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 7楼 renkejun1942
肯定是其它问题!

还在学习过程中,欢迎指教!
2017-03-26 12:55
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 9楼 吹水佬
执行到输入第一个字符串后,回车,就出现该内存不能为“written”!

还在学习过程中,欢迎指教!
2017-03-26 14:23
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 11楼 初学编程的人
我用的是Dev-C++ 5.11版本编译器,该程序代码编译是通过的。是运行出问题。不知道是代码原因,还是其它原因!

还在学习过程中,欢迎指教!
2017-03-26 16:39
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 14楼 吹水佬
还是老问题,是不是还有其它语句也要修改?

还在学习过程中,欢迎指教!
2017-03-26 16:50
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 16楼 吹水佬
这回出现,“0x77c178c0”指令引用的“0x00000000”内存。该内存不能为“read”。问题还是没解决!
该程序要求输入任意个字符串,存储到执行期间分配的内存中,再以字长顺序由短到长地输出。
我现在C语言才学到指针这一章节。所以只能用之前学的知识编写。

[此贴子已经被作者于2017-3-26 17:16编辑过]


还在学习过程中,欢迎指教!
2017-03-26 17:08
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 19楼 吹水佬
这里的确有问题,已把语句改过来,但是还是出现该内存不能为“written”!主要是解决为什么会出现该内存不能为“written”或“read”原因?因为近段学编C语言程序,老出这问题,代码反复修改。也没解决这问题!

还在学习过程中,欢迎指教!
2017-03-27 08:04
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 21楼 吹水佬
谢谢你!问题得到解决了。可否再问一下,
//char *pS = (char*)calloc(capacity, sizeof(char));
 char **pS = (char**)calloc(capacity, sizeof(char*));

 //pTemp = (char*)realloc(pS, capacity * sizeof(char));
            //if(!pTemp)
            pS = (char**)realloc(pS, capacity * sizeof(char*));
            if(!pS)
            {
                printf("没有分配内存!\n");
                return 3;
            }

            //pS = pTemp;
为什么要这么改?我原先写法有怎么错了?这方面是涉及分配内存哪个知识点?我要去哪里了解?谢谢!

还在学习过程中,欢迎指教!
2017-03-27 11:58
快速回复:新手求助!运行C语言程序时,出现该内存不能为“written”!是哪里出问 ...
数据加载中...
 
   



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

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