数组malloc& free有问题

时间:2014-03-23 11:04:21

标签: c arrays

我遇到阵列问题。

它显示错误:" lab2.exe中的0x5A90B2CE(msvcr120d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。" 当我想要免费时整数的记忆 - 年龄(free(my_array [i] [1]);)。

任何人都可以帮助我吗?我不知道该怎么做......

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>



void * my_array[5][3];
int i, j, age;
const int max = 50;

void memory_loc();
void getting_values();
void showing_values();
void memory_free();

int _tmain(int argc, _TCHAR* argv[])
{
    memory_loc();
    getting_values();
    showing_values();
    memory_free();

    system("pause");

    return 0;
}

void memory_loc()
{
    for (i = 0; i<5; i++)
    {
        my_array[i][0] = malloc(sizeof(char)* 50);
        my_array[i][1] = malloc(sizeof(int));
        my_array[i][2] = malloc(sizeof(char)* 50);
    }
}

void getting_values()
{
    for (i = 0; i<5; i++)
    {
        printf("\n%d\n", i);
        printf("Name and surname: \n");
        fgets((char*)my_array[i][0], max, stdin);

        printf("Age: \n");
        scanf("%d", &age);
        (int*)my_array[i][1] = age;
        getc(stdin);

        printf("Location: \n");
        fgets((char*)my_array[i][2], max, stdin);
    }
}

void showing_values()
{
    for (i = 0; i<5; i++)
    {
        printf("\nName and surname: %s", my_array[i][0]);
        printf("\nAge: %d", my_array[i][1]);
        printf("\nLocation: %s", my_array[i][2]);
    }
}

void memory_free()
{
    for (i = 4; i>=0; i--)
    {
        free(my_array[i][2]);
        free(my_array[i][1]);
        free(my_array[i][0]);
    }
}

1 个答案:

答案 0 :(得分:4)

您已更改my_array[i][1]指向此处的内容:

(int*)my_array[i][1] = age;

导致free中出现异常,因为您正试图释放尚未分配的内存。

你可能想写:

*(int*)(my_array[i][1]) = age;

正如有人评论的那样,如果您已阅读编译器警告,您可能已经发现了这一点。您应该收到一条警告,说明您将一个整数强制转换为指针或类似的东西。