如果在此上下文中使用malloc,是否会出现内存泄漏 int num_words=0; while((c=fgetc(in_fp))!=EOF){ 如果(c==32 | | c==10 | | c==13 | | c==46){ //32是空格,10是LF,13是CR,46是周期 //todo:添加其他类型的标点符号 num_words=num_words+1; } } char**words=(char**)malloc(num_words*sizeof(char*); if(words==NULL){ printf(“内存分配失败\n”); 返回1;//中止程序 } //将输入文件指针重置为文件的开头 倒带(in_fp); //为每个单词分配足够的空间 正在分配的int字=0; int word_size=0; 整数大小; while((c=fgetc(in_fp))!=EOF){ 如果(c==32 | | c==10 | | c==13 | | c==46){ //32是空格,10是LF,13是CR,46是周期 大小=(单词大小+1)*sizeof(字符); 字[分配的字]=(字符*)malloc(大小); if(单词[正在分配的单词]==NULL){ printf(“内存分配失败\n”); 返回1; } 分配的单词=分配的单词+1; 单词大小=0; 持续 } 单词大小=单词大小+1; } for(int i=0;i

如果在此上下文中使用malloc,是否会出现内存泄漏 int num_words=0; while((c=fgetc(in_fp))!=EOF){ 如果(c==32 | | c==10 | | c==13 | | c==46){ //32是空格,10是LF,13是CR,46是周期 //todo:添加其他类型的标点符号 num_words=num_words+1; } } char**words=(char**)malloc(num_words*sizeof(char*); if(words==NULL){ printf(“内存分配失败\n”); 返回1;//中止程序 } //将输入文件指针重置为文件的开头 倒带(in_fp); //为每个单词分配足够的空间 正在分配的int字=0; int word_size=0; 整数大小; while((c=fgetc(in_fp))!=EOF){ 如果(c==32 | | c==10 | | c==13 | | c==46){ //32是空格,10是LF,13是CR,46是周期 大小=(单词大小+1)*sizeof(字符); 字[分配的字]=(字符*)malloc(大小); if(单词[正在分配的单词]==NULL){ printf(“内存分配失败\n”); 返回1; } 分配的单词=分配的单词+1; 单词大小=0; 持续 } 单词大小=单词大小+1; } for(int i=0;i,c,memory-leaks,C,Memory Leaks,是否会有内存泄漏,因为我使用了两次malloc。我这里的问题是,因为我已经在为**个单词分配内存,当我在写单词[word\u being\u allocated]=(char*)malloc(size);就我们所见,只要不丢弃任何malloc()ed内存,您提供的代码就可以了。所以至少你有机会做到不泄密。您是否真的被释放取决于处理数据后的处理方式。只要您正确地释放()分配给malloc()的每个内存块,就不会发生内存泄漏 在此代码中编辑: 您似乎没有更新正在分配的word,因此您可能会覆盖wor

是否会有内存泄漏,因为我使用了两次malloc。我这里的问题是,因为我已经在为**个单词分配内存,当我在写单词[word\u being\u allocated]=(char*)malloc(size);就我们所见,只要不丢弃任何
malloc()
ed内存,您提供的代码就可以了。所以至少你有机会做到不泄密。您是否真的被释放取决于处理数据后的处理方式。

只要您正确地
释放()
分配给
malloc()
的每个内存块,就不会发生内存泄漏

在此代码中编辑

您似乎没有更新正在分配的
word,因此您可能会覆盖
words
数组中的同一指针槽,并且在这种情况下会泄漏内存(因为您没有
释放先前分配的指针)


当您正确更新分配的
word\u时,请确保不会溢出
words
指针数组的边界。

您使用哪种语言编写?C++或C?为什么?这不是你的真实代码,或者A。e、 g.在
的情况下不关闭
…这不是完整的代码。我刚刚添加了部分代码。你想让我写完整的代码吗?不,我想让你按照帮助中心关于如何提问的部分中的说明发布你的答案。char**words=(char**)malloc(num_words*sizeof(char*);words[word\u being\u allocated]=(char*)malloc(size)我担心这部分代码。我已经更新了部分代码。如果你能看一看,我将不胜感激
int num_words = 0;
while ((c = fgetc(in_fp)) != EOF) {
    if (c == 32 || c == 10 || c == 13 || c == 46) {
        //32 is Space, 10 is LF, 13 is CR, 46 is period
        //todo: Add other kinds of punctuation
        num_words = num_words + 1;
    }
}                                   

char** words = (char**) malloc(num_words * sizeof(char*));
if (words == NULL) {
    printf("Memory allocation failed\n");
    return 1; //abort program
}

//Reset the input file pointer to the start of the file
rewind(in_fp);

//Allocate enough space for each word
int word_being_allocated = 0;
int word_size = 0;
int size;
while ((c = fgetc(in_fp)) != EOF) {
    if (c == 32 || c == 10 || c == 13 || c == 46) {
        //32 is Space, 10 is LF, 13 is CR, 46 is period
        size = (word_size + 1) * sizeof(char);
        words[word_being_allocated] = (char*) malloc(size);
        if (words[word_being_allocated] == NULL) {
            printf("Memory allocation failed\n");
            return 1;
        }
        word_being_allocated = word_being_allocated + 1;
        word_size = 0;
        continue;
    }
    word_size = word_size + 1;
}
for (int i = 0; i < num_words; i++) {
    free(words[i]);
}
free(words);
while ((c = fgetc(in_fp)) != EOF) {
    if (c == 32 || c == 10 || c == 13 || c == 46) {
        //32 is Space, 10 is LF, 13 is CR, 46 is period
        size = (word_size + 1) * sizeof(char);
        words[word_being_allocated] = (char*) malloc(size);