- p 和 "hello,world"存储在内存哪个区域?( ) (鲁科安全)
int main()
{
char *p = "hello,world";
return 0;
}
- p在栈区,因为p是一个局部变量。
- "hello,world"在代码段,因为"hello,world"是字符串常量。
- 一个由C/C++编译的程序,会将占用的内存分为几个部分:堆、栈、代码段、数据段、BSS段。请问以下程序中的变量a、b、c、d,分别被存在内存的哪个部分?(泰华智慧)
int a = 0;
char *b;
int main()
{
int c;
static char d = 'a';
b = malloc(10);
*b = d;
return 0;
}
- a在数据段,因为a是一个已初始化的全局变量。
- b在BSS段,因为b是一个未初始化的全局变量。
- c在栈区,因为c是一个局部变量。
- d在数据段,因为d是一个已初始化的static变量。
- 如下代码:变量g_iA,g_iB,g_iC,iD,iE, iF, piG,iH 分别在内存中的什么区( ) (H3C)
int g_iA = 1;
int g_iB;
static int g_iC = 1;
void func1(){
static int iD=2;
iD++;
int iE=2;
iE++;
}
void func2(){
int iF=3;
int *piG = (int*) malloc(4);
}
int main(){
int iH = 100;
}
- g_iA在数据段,因为g_iA是一个已初始化的全局变量。
- g_iB在bss段,因为g_iB是一个未初始化的全局变量。
- g_iC在数据段,因为g_iC是一个已初始化的static全局变量。
- iD在数据段,因为iD是一个已初始化的static局部变量。
- iE在栈区,因为iE是一个局部变量。
- iF在栈区,因为iF是一个局部变量。
- piG在堆区,因为piG是一个手动分配空间的变量。
- iH在栈区,因为iH是一个局部变量。
- 有关内存的思考题 (山东山大电力技术有限公司,登虹科技,昆腾微电子)
void GetMemory(char *p)
{
p =(char *)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
请问运行 Test 函数会有什么样的结果?
在GetMemory函数中,p是一个局部变量,在栈区调用函数时自动分配空间,调用结束时自动释放空间,所以Test函数调用GetMemory函数得到的是一个野指针。
char * GetMemory(void)
{
char pl[] = "hello world"; //char *p = "hello world"
return p1;
}
Void Test(void)
{
char *str=NULL;
str = GetMemory();
printf(str);
}
请问运行 Test 函数会有什么样的结果?
在GetMemory函数中,p是一个局部变量,在栈区调用函数时自动分配空间,调用结束时自动释放空间,所以Test函数调用GetMemory函数得到的是一个野指针。
void GetMemory(char **p,int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello world");
printf(str);
}
请问运行 Test 函数会有什么样的结果?
在GetMemory函数中,p是一个在堆区手动分配空间的变量,但是malloc在申请空间时有可能失败,代码中没有判断,所以Test函数调用GetMemory函数时可能成功并输出hello world,也有可能申请空间失败导致的到一个野指针。
void Test (void)
{
char *str = (char *)malloc(100);
strcpy(str,"hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
请问运行 Test 函数会有什么样的结果?
在Test函数中,先在堆区手动申请了100字节的字符空间,然后又手动释放了空间,但是释放之后并没有指向NULL,所以释放之后是一个野指针。
- 堆和栈的区别是什么? (矩阵软件)
- 空间管理分配不同:栈区自动分配和释放空间,堆区手动分配和释放空间。
- 运行效率不同:因为栈区自动分配和释放空间,堆区手动分配和释放空间,所以栈区的效率比堆区快。
- 增长方式不同:栈区向下增长,堆区向上增长。
- 什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?(山大华天,智洋创新)
内存泄漏是指在程序中已分配的堆内存,由于某种原因未能被释放或无法访问,从而造成内存中的无用数据持续占用物理内存空间,导致可使用的内存空间逐渐减少的现象。解决内存泄漏:①使用free()函数释放内存,
②合理设计数据结构和算法,避免内存无限增长,
③设置合理的变量作用域,减少内存占用。
解决指针越界:①数组边界检查,确保在使用数组时下标在数组的有效范围内,
②使用指针初始化来检查,
③使用strncpy和strncat可以确保不会溢出目标缓冲区。
数据结构:内存的使用
¥ 多多¥2024-09-23 2:33
相关推荐
飞行的俊哥5 分钟前
Linux 内核学习 3b - 和copilot 讨论pci设备的物理地址在内核空间和用户空间映射到虚拟地址的区别一只小bit38 分钟前
C++之初识模版王磊鑫1 小时前
C语言小项目——通讯录钢铁男儿1 小时前
C# 委托和事件(事件)Ai 编码助手2 小时前
在 Go 语言中如何高效地处理集合喜-喜2 小时前
C# HTTP/HTTPS 请求测试小工具ℳ₯㎕ddzོꦿ࿐2 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据不会飞的小龙人2 小时前
Docker Compose创建镜像服务