数据结构之存储位置
- p 和 "hello,world"存储在内存哪个区域?( ) (鲁科安全)
int main()
{
char *p = "hello,world";
return 0;
}
p是栈区,”hello,world”是.ro段
- 一个由C/C++编译的程序,会将占用的内存分为几个部分:堆、栈、代码段、数据段、BSS段。请问以下程序中的变量a、b、c、d,分别被存在内存的哪个部分?(泰华智慧)
int a = 0; // 全局变量
char *b;// 全局变量
int main()
{
int c; //局部变量
static char d = 'a'; //static变量
b = malloc(10);
*b = d;
return 0;
}
a:.data段 b.bss段 c.栈区 d.data段
- 如下代码:变量g_iA,g_iB,g_iC,iD,iE, iF, piG,iH 分别在内存中的什么区( ) (H3C)
int g_iA = 1; //.data
int g_iB; //.bss
static int g_iC = 1; // .data
void func1(){
static int iD=2; // .data
iD++;
int iE=2; //栈区
iE++;
}
void func2(){
int iF=3; //栈区
int *piG = (int*) malloc(4); //堆区
}
int main(){
int iH = 100; //栈区
}
- 有关内存的思考题 (山东山大电力技术有限公司,登虹科技,昆腾微电子)
void GetMemory(char *p)
{
p =(char *)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
请问运行 Test 函数会有什么样的结果?
str 仍然是 NULL,然后尝试使用 strcpy 复制字符串到 NULL 指针,通常程序崩溃。
char * GetMemory(void)
{
char p1[] = "hello world"; //char *p = "hello world"
return p1;
}
Void Test(void)
{
char *str=NULL;
str = GetMemory();
printf(str);
}
请问运行 Test 函数会有什么样的结果?
GetMemory 函数返回一个指向局部数组 pl 的指针。这个数组在函数返回后会失效,因此返回的指针指向的是一个未定义的值。
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 函数会有什么样的结果?
能正常打印hello,world
void Test (void)
{
char *str = (char *)malloc(100);
strcpy(str,"hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
请问运行 Test 函数会有什么样的结果?
可以正常打印world
- 堆和栈的区别是什么? (矩阵软件)
- 增长方向不同。
- 管理分配速度不同。
- 空间大小不同。
- 频繁的使用堆会产生大量的碎片,而栈则不会。
什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?(山大华天,智洋创新)
内存泄漏:如果没有适时释放被动态分配的内存,会导致内存泄露问题。未释放的内存一直占用系统资源,使得系统变慢并最终导致崩溃。
解决方法:即使使用free内存释放,合理设计算法,避免算法问题导致的内存无线增长,合理设置作用域。保证数据不会超过分配内存来避免指针越界。