| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6296 人关注过本帖
标题:新手求助!运行C语言程序时,出现该内存不能为“written”!是哪里出问题? ...
只看楼主 加入收藏
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
收藏
得分:0 
char buf[BUF_LEN] = "\0";
这句没看懂,把0作为字符串给了buf字符数组,如果想让第101个字符为终止符'\0'要用单引号

pS[count] = (char*)malloc(BUF_LEN);
这句也没看懂,pS[count]是个字符,malloc返回一个地址,这里你强制返回一个指向字符类型的地址,然后你要把地址放入一个字符中?

strcpy(pS[count], buf);
这个与上一个差不多问题,后面类似的很多,估计你的字符估计都是地址

楼主用的哪个编译器,我用的vs2010,提示很多警告,没法编译通过
2017-03-26 15:38
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
这两句好象有问题:
char *pS = (char*)calloc(capacity, sizeof(char)); pS表达的是存储一个字符的地址,pS[0]第一个字符,pS[1]第2个字符。
......
pS[count] = (char*)malloc(BUF_LEN); 这时不能用pS[count]储一个字符的地方来存储一个指针地址值。
2017-03-26 16:15
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 11楼 初学编程的人
我用的是Dev-C++ 5.11版本编译器,该程序代码编译是通过的。是运行出问题。不知道是代码原因,还是其它原因!

还在学习过程中,欢迎指教!
2017-03-26 16:39
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用zmf876870302在2017-3-26 16:39:58的发言:

我用的是Dev-C++ 5.11版本编译器,该程序代码编译是通过的。是运行出问题。不知道是代码原因,还是其它原因!

语句语法没问题编译没问题,不等于运行没问题。
试试改改这句:
//char *pS = (char*)calloc(capacity, sizeof(char));
char **pS = (char**)calloc(capacity, sizeof(char*));
2017-03-26 16:44
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 14楼 吹水佬
还是老问题,是不是还有其它语句也要修改?

还在学习过程中,欢迎指教!
2017-03-26 16:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
这里与pS有关,试改改
            //pTemp = (char*)realloc(pS, capacity * sizeof(char));
            pS = (char**)realloc(pS, capacity * sizeof(char*));
            if(!pS)
            {
                printf("没有分配内存!\n");
                return 3;
            }
            //pS = pTemp;
2017-03-26 16:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
示例,是不是要做类似的事:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
    char **p = (char**)malloc(2*sizeof(char*));
    p[0] = (char*)malloc(10*sizeof(char));
    p[1] = (char*)malloc(10*sizeof(char));
    strcpy(p[0], "ABCDE");
    strcpy(p[1], "123456789");
    printf("%s\n", p[0]);
    printf("%s\n", p[1]);
    p = (char**)realloc(p, 3*sizeof(char*));
    p[2] = (char*)malloc(10*sizeof(char));
    strcpy(p[2], "abcd1234");
    printf("%s\n", p[0]);
    printf("%s\n", p[1]);
    printf("%s\n", p[2]);
    free(p[0]);   
    free(p[1]);   
    free(p[2]);   
    free(p);   
}



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

2017-03-26 17:05
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
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 18楼 zmf876870302
这里改改
        //for(i = 0; i < count; ++i)
        for(i = 0; i < count-1; ++i)
        {
            if(strlen(pS[i]) > strlen(pS[i + 1]))
2017-03-26 20:16
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
收藏
得分:0 
回复 19楼 吹水佬
这里的确有问题,已把语句改过来,但是还是出现该内存不能为“written”!主要是解决为什么会出现该内存不能为“written”或“read”原因?因为近段学编C语言程序,老出这问题,代码反复修改。也没解决这问题!

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



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

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