下面的程序能够编译而且也能够正常运行,但其中包含了多处错误。
请一一指明错误所在并说明原因。 求助啊。。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int global = 1 ;
char* string;
void hello(){
strcpy(string , "Hello World!");
printf("%s\n" , string);
}
int *foo1(){
return &global;
}
int *foo2(){
int i = 2 ;
int *p = &i ;
return p ;
}
int *foo3(){
static int i = 3 ;
return &i ;
}
int *foo4(){
int *p = (int *)malloc(sizeof (int));
*p = 4 ;
return p ;
}
void bar(){
int *p;
p = foo1();
//printf( "%d\n" , p);
printf( "%d\n" , *p);
p = foo2();
//printf( "%d\n" , p);
printf("%d\n" , *p);
p = foo3();
//printf( "%d\n" , p);
printf("%d\n" , *p);
p = foo4();
//printf( "%d\n" , p);
printf( "%d\n" , *p);
}
int main(int argc , char* argv[]){
// h e l l o ( ) ;
bar();
system("pause" ) ;
return 0 ;
}
分享到:
相关推荐
在深入探讨C语言内存分布的关键概念——SS段、数据段、代码段、堆与栈之前,我们有必要了解这些概念在程序执行过程中的角色与功能,以及它们如何共同作用以实现程序的正常运行。 ### SS段(BSS段) BSS段(Block ...
### BSS段、数据段、代码段、堆与栈详解 #### 一、BSS段 **BSS段**(Block Started by Symbol)是程序中用于存放未初始化的全局变量的一块内存区域。这类变量通常在程序启动时由操作系统自动设置为零值。BSS段的特点...
### C/C++内存分配详解:堆、栈、数据段及其他 #### 一、C语言中的内存区域划分 在C语言中,程序运行时使用的内存主要分为以下几个区域: 1. **栈区**:由编译器自动分配和释放,主要用于存储函数调用时的局部...
### C和C++中的动态内存分配详解:堆、栈、数据段 #### 一、C语言中的内存区域 在C语言中,程序运行时的内存主要分为以下几个区域: 1. **栈区**:由编译器自动分配和释放。主要用于存放函数调用时的局部变量、...
- **存储时**:指的是程序在编译和链接的过程中对内存的划分和分配,通常涉及代码段、数据段和BSS段等固定部分的分配。 - **运行时**:则是程序运行过程中动态发生的内存分配行为,主要通过栈和堆进行。 #### 存储...
下面通过几个具体的示例来进一步理解堆和栈的概念以及它们之间的区别。 ##### 示例1:局部变量与对象引用 ```java int a = 3; int b = 3; ``` 在这段代码中,`a` 和 `b` 都是整型变量,它们被声明为局部变量并...
在计算机领域,堆栈是一个不容忽视的概念,我们编写的...C语言程序经过编译连接后形成编译、连接后形成的二进制映像文件由栈,堆,数据段(由三部分部分组成:只读数据段,已经初始化读写数据段,未初始化数据段即BBS)
在C++编程语言中,根据变量的存储方式和生命周期,可以将内存区域大致分为四个部分:静态存储区、栈、堆以及未初始化的数据段(BSS)。其中,静态存储区、栈与堆是程序运行时频繁使用的三个重要内存区域。本文将重点...
- 栈内存中存在溢出风险,堆内存中存在内存泄漏问题。 - 栈内存的地址连续性好,而堆内存的地址不一定连续,可能导致内存碎片。 了解这些内存区域的特性对于优化代码性能、调试错误以及防止内存泄漏至关重要。在...
- **栈**:栈是由系统自动进行管理的,通常用于存储函数调用时的局部变量以及函数参数等数据。当一个函数被调用时,系统会自动为其分配一块栈空间,并在其执行完毕后自动释放这块空间。 - **堆**:堆则需要程序员...
通过分析这个Delphi源码实例,我们可以看到如何在实践中使用堆和栈分配内存,以及它们各自的特点。源代码可能会包含不同类型的变量声明,比如全局变量(通常在堆上)、局部变量(在栈上)和动态数组(既可以栈上也...
对任何一个普通进程来讲,它都会涉及到五种不同的数据段,这五种数据段分别是:代码段、数据段、BSS 段、堆(heap)和栈。 代码段 代码段是用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的镜像。...
在这个主题中,我们将深入探讨JDK的配置、数组的应用以及栈和堆内存的图解,同时通过具体的Java源码来加深理解。 首先,JDK(Java Development Kit)是开发和运行Java应用程序必不可少的软件包。配置JDK主要包括...
这段代码首先在栈内存中创建了一个引用变量`x`,然后在堆内存中创建了一个包含100个整数元素的数组,并将该数组的地址赋值给`x`。因此,`x`实际上是指向堆内存中数组的引用。 **引用变量的特点:** - 引用变量本身...
这些题目涉及的数据结构主要包括栈、队列和堆,它们是...以上是对给定文件中四道试题的解析,它们分别展示了栈、队列和堆数据结构在实际问题中的应用。理解并掌握这些基本数据结构,对于解决计算机算法问题至关重要。
堆上的数据虽然灵活性更高,但也更容易受到非法访问和内存泄漏等问题的影响。 ### 实例应用 例如,在C++中创建一个动态数组,我们可能选择在堆上分配内存,因为我们需要一个未知大小的数组。这时,我们可以使用`...
在现代计算机系统中,程序存储器布局通常分为多个段,包括代码段、数据段、BSS 段、堆、栈和常量段等。每个段都有其特定的功能和存储内容。 代码段(Text Segment) 代码段是程序执行代码的存储区域。这部分区域的...
- 堆:常量字符串如 "Hello World" 通常在编译时确定,存储在数据段或只读数据段。 - 栈:动态赋值如字符数组 "Hello World" 在运行时分配,存取速度较快。 理解堆和栈的区别对于优化程序性能、避免内存泄漏和栈...
在计算机编程领域,堆和栈是两种重要的内存管理方式,它们在数据存储、分配以及管理方面扮演着不同的角色。本文将详细介绍堆和栈的区别,并结合Windows操作系统下的具体实现来深入探讨。 #### 一、基础知识 在C/...
本文将详细探讨堆与栈之间的区别以及它们在实际应用中的作用。 #### 二、概念定义 **1. 栈(Stack):** - 栈是一种遵循先进后出(LIFO)原则的数据结构。 - 它由操作系统自动分配与释放,通常用于存储局部变量...