#include<stdio.h>
#include<malloc.h>
#include<string.h>
void foo( char ** ptr)
{
*ptr = malloc(0); // allocate some memory**
strcpy( *ptr, "Hello World");
}
int main()
{
char *ptr = 0;
// call function with a pointer to pointer
foo( &ptr );
printf("%s\n", ptr);
// free up the memory
free(ptr);
return 0;
}而且它还在运行
#include<stdio.h>
#include<malloc.h>
#include<string.h>
void foo( char ** ptr)
{
*ptr = malloc(11); // allocate some memory
strcpy( *ptr, "Hello World");
}
int main()
{
char *ptr = 0;
// call function with a pointer to pointer
foo( &ptr );
printf("%s\n", ptr);
// free up the memory
free(ptr);
return 0;
}通过任何number...it更改malloc始终是running.how,这是可能的?Hello World有12个字符,所以可以在0,12,8,任何数字中运行。
发布于 2011-03-03 13:54:22
您遇到的事实是C不执行任何边界检查。因此,你复制到malloc'd的内存是在超量运行分配,并在随后的内存上“涂鸦”。结果是不确定的。它可能会起作用,可能会崩溃,可能会给你泡一杯咖啡。你不知道。
顺便说一句,这种错误会导致缓冲区溢出攻击。
发布于 2011-03-03 14:03:26
很明显,代码中有bug。
有两种可能性:
发布于 2011-03-03 13:54:38
C并不关心你实际分配了多少(除了0;如果你这样做,事情可能会变得很糟糕);只要你不超过各种人为的限制,你的程序就会(看起来)工作。你只是没有撞到他们中的一个。
https://stackoverflow.com/questions/5177152
复制相似问题