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. 贬抑;屈辱;谦卑
husky66
husky66 知道了。。。MAXNUM位置有错,开始开辟空间的时候,MAXNUM=0;。。。。。。。。。。。。。。
8 个月之前 回复
husky66
husky66 不知道咋撤销。。。。。。。。。。。。。。。。。。。。。。。。。。
8 个月之前 回复
husky66
husky66 知道了。。。MAXNUM位置有错,开始开辟空间的时候,MAXNUM=0;。。。。。。。。。。。。。。
8 个月之前 回复

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐