| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6348 人关注过本帖
标题:新手求助!运行C语言程序时,出现该内存不能为“written”!是哪里出问题? ...
只看楼主 加入收藏
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:23 
新手求助!运行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
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
那说明你对值为NULL的指针进行了解应用。

另外能不能别认为可以编译就是正确的,C语言,能编译的错误多天上去了。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 12:15
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
程序代码:
    for(j = 0; j < count; ++j)
    {
        printf("\t%d>.\t%s\n", j + 1, pS[j]);
        free(pS[j]);//明显的错误,
        pS[j] = NULL;//明显的错误
    }

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 12:20
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 3楼 renkejun1942
那怎么修改?才学C语言。

还在学习过程中,欢迎指教!
2017-03-26 12:22
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
程序代码:
    for(j = 0; j < count; ++j)
    {
        printf("\t%d>.\t%s\n", j + 1, pS[j]);
        free(pS[j]);
        pS[j] = NULL;
    }


改成
程序代码:
    for(j = 0; j < count; ++j)
    {
        printf("\t%d>.\t%s\n", j + 1, pS[j]);
    }
        free(pS);
        pS = NULL;



09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 12:23
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 5楼 renkejun1942
我试了,程序还是出现该内存不能为“written”!应该不是这里问题吧。我书上也是这样释放内存。

还在学习过程中,欢迎指教!
2017-03-26 12:40
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 6楼 zmf876870302
你看的书上也是这么写的?跟你写的一样?
如果是的话,那么……你该把那书烧了。

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


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-26 12:50
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 7楼 renkejun1942
肯定是其它问题!

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

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



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

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