关于invalid next size (fast)有关问题
关于invalid next size (fast)问题
#include <stdio.h>
int main(void)
{
int *ip = NULL;
ip = malloc (sizeof (int));
*(ip + 0) = 1;
*(ip + 1) = 2;
*(ip + 2) = 3;
//*(ip + 3) = 4;
*(ip + 4) = 5;
printf ( "%d - %x\n ", *(ip + 0), ip + 0);
printf ( "%d - %x\n ", *(ip + 1), ip + 1);
printf ( "%d - %x\n ", *(ip + 2), ip + 2);
printf ( "%d - %x\n ", *(ip + 3), ip + 3);
printf ( "%d - %x\n ", *(ip + 4), ip + 4);
if (ip != NULL)
free(ip);
}
每每在给ip + 3这个位置赋值时,会出现invalid next size (fast)。而注释掉这行后便相安无事。
我想问的是,是不是系统在malloc的时候,将所分配内存的档案信息都放在特定的位置?如果是的话,这特定的位置又是如何计算的呢?
------解决方案--------------------
给ip + 3这个位置赋值时不出错,那是你运气好.
你用malloc(sizeof(int))分配了一段空间
int类型的指针ip指向了这段空间,
*(ip+0)=1. 给这段空间赋值,
*(ip+1)=2, ip往后移动一个位置,大小为sizeof(int)个字节,此处,已经是对无效的空间赋值了,没有出错,那是你运气好,
#include <stdio.h>
int main(void)
{
int *ip = NULL;
ip = malloc (sizeof (int));
*(ip + 0) = 1;
*(ip + 1) = 2;
*(ip + 2) = 3;
//*(ip + 3) = 4;
*(ip + 4) = 5;
printf ( "%d - %x\n ", *(ip + 0), ip + 0);
printf ( "%d - %x\n ", *(ip + 1), ip + 1);
printf ( "%d - %x\n ", *(ip + 2), ip + 2);
printf ( "%d - %x\n ", *(ip + 3), ip + 3);
printf ( "%d - %x\n ", *(ip + 4), ip + 4);
if (ip != NULL)
free(ip);
}
每每在给ip + 3这个位置赋值时,会出现invalid next size (fast)。而注释掉这行后便相安无事。
我想问的是,是不是系统在malloc的时候,将所分配内存的档案信息都放在特定的位置?如果是的话,这特定的位置又是如何计算的呢?
------解决方案--------------------
给ip + 3这个位置赋值时不出错,那是你运气好.
你用malloc(sizeof(int))分配了一段空间
int类型的指针ip指向了这段空间,
*(ip+0)=1. 给这段空间赋值,
*(ip+1)=2, ip往后移动一个位置,大小为sizeof(int)个字节,此处,已经是对无效的空间赋值了,没有出错,那是你运气好,