gpt4 book ai didi

c - 数组 malloc free 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:14 25 4
gpt4 key购买 nike

数组有问题。

它显示错误:“lab2.exe 中 0x5A90B2CE (msvcr120d.dll) 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000000。” 当我想释放整数 - 年龄的内存时(免费(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]);
}
}

最佳答案

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

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

这会导致 free 出现异常,因为您正在尝试释放尚未分配的内存。

你可能打算写:

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

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

关于c - 数组 malloc free 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com