c - 释放指向字符数组的指针的内存

标签 c pointers memory malloc free

我尝试释放指向字符数组的指针的内存。 我没有收到错误,但是当我检查 Dr.Memory 时我发现:

      1 unique,    13 total unaddressable access(es)
      0 unique,     0 total uninitialized access(es)
      1 unique,     1 total invalid heap argument(s)
      0 unique,     0 total GDI usage error(s)
      0 unique,     0 total handle leak(s)
      0 unique,     0 total warning(s)
      1 unique,     1 total,      8 byte(s) of leak(s)
      0 unique,     0 total,      0 byte(s) of possible leak(s)

我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define SIZE_NAME 20

    int main(void)
    {
        int players, i, j;
        char** p_Array = NULL;
        char name[SIZE_NAME];

        printf("Enter number of players in basketball: ");
        scanf_s("%d", &players);

        p_Array = (char**)malloc(sizeof(char*) * players); // array with [players] cells.
        for (int i = 0; i < SIZE_NAME; i++)
            *(p_Array + i) = (char*)malloc((SIZE_NAME + 1) * sizeof(char));

        for (i = 0; i < players; i++)
        {
            printf("Enter name for player number %d: ", i + 1);

            fflush(stdin); // clear buffer
            gets(name);
            strcpy(*(p_Array + i), name);
        }


        for (i = 0; i < players; i++)
        {
            printf("Name of player number %d is %s \n", i + 1, *(p_Array + i) );
        }

        for (i = 0; i < players; i++)
            free(*(p_Array + i)); // delete the array from the RAM. 
        getchar();  
        return 0;
    }

最佳答案

您为此循环使用了错误的循环绑定(bind):

for (int i = 0; i < SIZE_NAME; i++)
    *(p_Array + i) = (char*)malloc((SIZE_NAME + 1) * sizeof(char));

循环应该是:

for (int i = 0; i < players; i++)
    ...

关于c - 释放指向字符数组的指针的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301317/

相关文章:

c - 为什么 Strcpy 函数不能与指向数组的指针一起使用?

c - 为什么需要为越来越多的指针数组重新分配内存?

java - 增加Java虚拟内存

c - free() 的时间复杂度是多少?

c - 在 Linux 中使用 Signal 发送信息

c++ - 这个复杂声明的含义

linux - 主引导记录,分区表

c++ - 如何注释#if、#else、#endif 预处理器构造?

c - 将 libcurl 与 libevent 一起使用

c - 从函数发送指针