我遇到阵列问题。
它显示错误:" 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]);
}
}
答案 0 :(得分:4)
您已更改my_array[i][1]
指向此处的内容:
(int*)my_array[i][1] = age;
导致free
中出现异常,因为您正试图释放尚未分配的内存。
你可能想写:
*(int*)(my_array[i][1]) = age;
正如有人评论的那样,如果您已阅读编译器警告,您可能已经发现了这一点。您应该收到一条警告,说明您将一个整数强制转换为指针或类似的东西。