久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1754|回復: 11
打印 上一主題 下一主題
收起左側

關于C語言的2個問題,為什么使用*pt=wordpt;會報錯

[復制鏈接]
跳轉到指定樓層
樓主
ID:879924 發表于 2022-1-24 21:29 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
#include <stdio.h>
#include <stdlib.h
#include <string.h>

int main(void)
{
        int i;
        int count;
        char **pt;
        printf("How many words do you wish to enter? \n");
        scanf("%d",&count);
        printf("Enter %d words now: \n",count);
        pt=(char**)malloc(count*sizeof(char*));
        for(i=0;i<count;i++)
        {
                char *wordpt;
                int len;
                char temp[100];
                scanf("%s",temp);
                len=strlen(temp);
                wordpt=(char*)malloc(len*sizeof(char));
                strcpy(wordpt,temp);
//                *pt[ i]=wordpt;
                *(pt+i)=wordpt;
//                free(wordpt);
        }
        for(i=0;i<count;i++)
        {
                printf("%s\n",*(pt+i));
               
        }

        free(pt);
        printf("Done!\n");
        return 0;        
}


1.為什么使用*pt[ i]=wordpt;會報錯,而*(pt+i)=wordpt;卻可以,不是一樣的嗎?
2.為什么wordpt不用free?free了就會報錯。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

12#
ID:879924 發表于 2022-1-27 20:53 | 只看該作者

謝謝  腦子里想著 pt[ i] 結果也打成了pt
這下都明白了。。再次感謝大神
回復

使用道具 舉報

11#
ID:844772 發表于 2022-1-27 10:26 | 只看該作者
macboa 發表于 2022-1-26 20:13
我大概明白了。。。 應該是 for (i=0;i

是 for (i=0;i<count;i++) free(pt[ i]); 輸入法沒弄好,我少打了[ i]。另外我覺得指針熟練用一種方法就夠啦,這些是為數據結構和算法服務的。
回復

使用道具 舉報

10#
ID:879924 發表于 2022-1-26 20:13 | 只看該作者
glinfei 發表于 2022-1-26 14:52
我上邊說了,你在free(pt);之前加上 for (i=0;i

我大概明白了。。。 應該是 for (i=0;i<count;i++) free(pt[ i]); free(pt);是吧!實際上申請了count次內存空間,但是wordpt不斷的被更新,所以只記錄了最后一個地址。。。如果free(wordpt)就只釋放最后一次內存空間。應該是這個意思吧?
回復

使用道具 舉報

9#
ID:879924 發表于 2022-1-26 20:09 | 只看該作者
123456ZXC1 發表于 2022-1-26 12:52
pt[ i]=wordpt;  它跟*(pt+i)=wordpt

謝謝您,明白啦
回復

使用道具 舉報

8#
ID:844772 發表于 2022-1-26 14:52 | 只看該作者
macboa 發表于 2022-1-26 12:41
那么wordpt 要在什么地方釋放呢???
我換了幾個地方,都是編譯出錯

我上邊說了,你在free(pt);之前加上 for (i=0;i<count;i++) free(pt);  就相當于把每個wordpt都釋放了。wordpt申請的空間,你用在pt[ i]了,所以不可能提前釋放的,合適的位置在 printf("%s\n",*(pt+i));之后,而且不能用wordpt,因為它只記錄了最后一個地址。
其實 wordpt=(char*)malloc(len*sizeof(char)); 也有問題,少申請了一個字節,因為strlen()測的長度不包含結尾的NULL,但strcpy是包含的。
回復

使用道具 舉報

7#
ID:526543 發表于 2022-1-26 12:52 | 只看該作者
pt[ i]=wordpt;  它跟*(pt+i)=wordpt
回復

使用道具 舉報

6#
ID:879924 發表于 2022-1-26 12:41 | 只看該作者
glinfei 發表于 2022-1-26 11:16
1.你用debug看看就知道,pt【i】和wordpt內容相同,指向同一個地址,所以free一個,另一個也失效了。
2. ...

那么wordpt 要在什么地方釋放呢???
我換了幾個地方,都是編譯出錯
回復

使用道具 舉報

5#
ID:844772 發表于 2022-1-26 11:16 | 只看該作者
macboa 發表于 2022-1-25 19:23
還有一個不解,就是 free了pt  就連同wordpt 一起釋放了嗎? wordpt可以單獨釋放嗎? 我在return 前面  f ...

1.你用debug看看就知道,pt【i】和wordpt內容相同,指向同一個地址,所以free一個,另一個也失效了。
2.free了pt,wordpt剛才給它的空間沒釋放,只是沒法通過pt使用了;
3.二級指針的釋放,應該逐個釋放 比如先 for (i=0;i<count;i++) free(pt[ i]);   再釋放 free(pt); 你在程序中僅僅free(pt),會造成無法回收的內存碎片。
回復

使用道具 舉報

地板
ID:879924 發表于 2022-1-25 19:23 | 只看該作者
glinfei 發表于 2022-1-25 09:52
1.正確的寫法是pt[ i]=wordpt;  它跟*(pt+i)=wordpt;才一樣,看明白吧?
2.當然不能free了,你把wordpt的 ...

還有一個不解,就是 free了pt  就連同wordpt 一起釋放了嗎? wordpt可以單獨釋放嗎? 我在return 前面  free(pt)后面 free(pt)前面 free wordpt 都會出錯。。。
回復

使用道具 舉報

板凳
ID:879924 發表于 2022-1-25 19:14 | 只看該作者
glinfei 發表于 2022-1-25 09:52
1.正確的寫法是pt[ i]=wordpt;  它跟*(pt+i)=wordpt;才一樣,看明白吧?
2.當然不能free了,你把wordpt的 ...

這里的人友善熱情,除此之外不知道去哪里問了。。。謝謝你,,,明白啦~
回復

使用道具 舉報

沙發
ID:844772 發表于 2022-1-25 09:52 | 只看該作者
1.正確的寫法是pt[ i]=wordpt;  它跟*(pt+i)=wordpt;才一樣,看明白吧?
2.當然不能free了,你把wordpt的空間地址給了pt[i],如果free了,相當于把pt[i]的空間釋放了,等下print啥啊。
3.為啥在這問C的問題?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天操天天摸天天干 | 免费人成激情视频在线观看冫 | 国产成人精品午夜视频免费 | 亚洲视频在线免费观看 | 久久久久se | 在线看片国产精品 | 亚洲电影一区 | 亚洲天天干| 免费观看黄色片视频 | 97视频免费 | 日韩精品视频在线 | 91麻豆产精品久久久久久 | 欧美精品一区在线发布 | 色免费视频| 欧美黄 片免费观看 | 玖玖国产精品视频 | 精品视频国产 | 欧美日韩一区二区三区不卡视频 | 亚洲高清在线观看 | 久久亚洲经典 | 91精品久久久久久久久 | 亚洲444eee在线观看 | 亚洲不卡在线视频 | 亚洲免费片 | 久久国产精品视频 | 国产偷录叫床高潮录音 | 久久久久久国模大尺度人体 | 国产高清在线精品一区二区三区 | 免费视频二区 | 99精品免费久久久久久久久日本 | 天天影视亚洲综合网 | 一区二区三区成人 | 欧区一欧区二欧区三免费 | 欧美精品一区二区三区四区 | 成人自拍视频网站 | 欧美一a一片一级一片 | 激情福利视频 | 成人在线视频免费观看 | 视频在线一区二区 | 欧美日韩中文字幕在线 | 天天躁日日躁狠狠的躁天龙影院 |