husky66 2019-09-27 17:06 采纳率: 57.1%
浏览 310

C语言用malloc有数量限制吗?

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#include<time.h>

//1.定义一个结构体
struct dicts
{
    char * word;     //存放单词
    char * trans;     //存放单词的意思
};

 int main(void)
{
     int MAXNUM = 0;
     char arr[1024] = { 0 };
     int i = 0;

     struct dicts * dic;
     struct dicts * dic1;
     dic = (struct dicts *) malloc(sizeof(struct dicts)*MAXNUM);
     dic1 = (struct dicts *) malloc(sizeof(struct dicts));

   //打开一个单词文件
     FILE * fp = fopen("D:\\dict.txt", "r");
     if (!fp)
     {
         printf("文件打开失败!");
         return -1;
     }

//判断dict.txt中有多少个单词
     while (!feof(fp))
     {
         fgets(arr, 1024, fp);
         i++;
     }
     MAXNUM = i / 2;
     printf("%d\n", MAXNUM);

     //将文件光标从新定位到开头
     rewind(fp);

     //将所有的单词都读取到dic结构体中
     i = 0;
     while (!feof(fp))
     {
         printf("%d\n", i);

        //将单词放到dic[i].word中
         memset(arr, 0, 1024);
         fgets(arr, 1024, fp);
         dic[i].word = (char *)malloc(strlen(arr) + 1);
         memset(dic[i].word, 0, strlen(arr) + 1);
         strncpy(dic[i].word, arr, strlen(arr) + 1);

    //将单词的意思放到dic[i].trans中
         memset(arr, 0, 1024);
         fgets(arr, 1024, fp);
         dic[i].trans = (char *)malloc(strlen(arr) + 1);
         memset(dic[i].trans, 0, strlen(arr) + 1);
         strncpy(dic[i].trans, arr, strlen(arr) + 1);

         i++;
     }

     ........(下面代码没写,从上面的循环崩的。)

为啥会崩感觉没错啊!内存也充足。就是单词个数有11万个,但是每次运行在不同的地方崩掉,有时候循环100个单词,有时候循环2000个单词。

以下是dict.txt中一部分内容:

#a
Trans:art. 一;字母A
#a.m.
Trans:n. 上午
#a/c
Trans:n. 往来帐户@往来:come - and - go; contact; 
#aardvark
Trans:n. 土猪
#aardwolf
Trans:n. 土狼
#aasvogel
Trans:n. 秃鹰之一种
#abaci
Trans:n. 算盘
#aback
Trans:ad. 向后地;朝后地
#abacus
Trans:n. 算盘
#abaft
Trans:ad. 向船尾@prep. 在...后
#abalone
Trans:n. 鲍鱼
#abandon
Trans:vt. 放弃;沉溺@n. 放任
#abandoned
Trans:a. 被抛弃的;自弃的;自甘堕落的
#abandonee
Trans:n. 被遗弃者;被委付者
#abandoner
Trans:n. 遗弃者;委付者
#abandonment
Trans:n. 放弃;自暴自弃;放纵
#abas
Trans:vt. 打倒
#abase
Trans:vt. 降低...的地位;降低...的品格;贬抑
#abasement
Trans:n. 贬抑;屈辱;谦卑
  • 写回答

1条回答

  • zqbnqsdsmd 2019-10-01 00:02
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退