首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >malloc...unexpected行为c++编程

malloc...unexpected行为c++编程
EN

Stack Overflow用户
提问于 2011-03-03 13:50:28
回答 4查看 301关注 0票数 0
代码语言:javascript
运行
复制
#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;
}

而且它还在运行

代码语言:javascript
运行
复制
#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,任何数字中运行。

EN

Stack Overflow用户

发布于 2011-03-03 14:03:26

很明显,代码中有bug。

有两种可能性:

  1. 你很幸运,因为strcpy()没有命中任何有意义的东西,所以程序运行了。
  2. malloc()通常会分配比请求多几个字节,以便更好地保持内存对齐。例如,它完全有可能以16个物理字节为单位进行分配。
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5177152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档