c语言程序中开辟空间

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;
void Init(LinkList L)
{
printf("%d ",L);
L=(LinkList)malloc(sizeof(Lnode));
printf("%d ",L);
L->next=0;
}
void main()
{
Lnode A;
printf("%d ",&A);
Init(&A);
}
很对不起,上面的的确错了,太急了,弄错了,这个是正确的,
在这个程序中关于开辟存储空间的问题:Lnode A,定义变量A,开辟一个存储空间,而初始化函数中Init()也开辟了一个存储空间,只不过这两个存储空间的位置不一样,但是既然是初始化,那他两个的都开辟了空间,不是重复了吗?
我的理解是:实参&A传递A空间的地址给指针L,但是再初始化的函数里又malloc了一个空间,那么L的值不是改变了变了吗?
既然这样那干嘛还要初始化?直接用定义变量开辟空间不就行了,可是这样操作的我下面的程序就会出错,而我见好多书上都有这个初始化。求助。。

第1个回答  推荐于2017-11-25
#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;

LinkList Init()
{
LinkList L = NULL;
printf("%d ",L);
L=(LinkList)malloc(sizeof(Lnode));
printf("%d ",L);
L->next=0;

return L;
}

void main()
{
LinkList A = NULL;

printf("%d ",A);
A = Init();
}追问

能帮我解答一下初始化函数的作用吗?

追答

LinkList A = NULL;//避免指向随机内存,一旦使用非常危险。
LinkList Init()// 申请内存后,把地址返回来,这样A就指向有效地址。
在使用指针前,最好要加判断。比如:
if(A != NULL)
{
对A进行操作。
}

或者:
if(A == NULL)
{
输出提示,或者退出程序/函数。
}

追问

我感觉我写的程序中的初始化函数对A没有起一点作用...............因为初始化以后A什么都没变化,所以我感觉 Lnode A,就是最终的初始化。谢谢你了!!!

本回答被网友采纳
第2个回答  2012-05-11
printf("%d ",L); 不能直接输出结构体内容啊
第3个回答  推荐于2018-06-18
三个函数的声明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函数库内
原型:extern void *realloc(void *mem_address, unsigned int newsize);
用法:#include <alloc.h>
功能:改变mem_address所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
原型:extern void *malloc(unsigned int num_bytes);
用法:#include <alloc.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
原型:extern void *calloc(int num_elems, int elem_size);
用法:#include <alloc.h>
功能:为具有num_elems个长度为elem_size元素的数组分配内存
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
区别:
1、calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据
2、realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度本回答被网友采纳
第4个回答  2012-05-11
顶楼上的

C语言,什么时候需要开辟空间
其实写一个函数,开头的声明变量或数组就是在开辟空间,所以只要写代码,开辟空间的事肯定就少不了。但你这里说的我想应该是指“动态开辟空间”。动态开辟空间一般在以下情况下进行:编程时不知道需要多大的空间,要在程序运行时由用户输入大小或计算出所需大小;一些数据量太大,栈区放不下,需要创建在...

用C语言分配开辟内存问题
下一个:new和malloc()分配的空间都是在堆区,堆你就可以随意申请了,系统会在系统空闲的链表中找出你要申请空间的大小,标志为已经使用了,然后就会给你用 在申请空间后,注意检测一下申请空间返会值,为NULL就是系统给你分配空间失败了,用完了之后,你需要delete或free()掉你申请的,然后系统就...

【C】动态内存管理 malloc calloc relloc free 函数详解
该代码中free函数释放了malloc开辟的动态内存空间,但是没有将指针置空,导致后面调用时出现了野指针导致了非法访问。所以一个好的代码习惯是在释放动态内存空间后,将这个空间的指针置为空。5. C\/C++程序的内存开辟 C\/C++程序内存分配的几个区域:有了这幅图,我们就可以更好的理解之前介绍的static关...

C语言中如何动态增加内存空间
动态增加内存空间 可以用 realloc 函数。函数原型是。void* realloc (void* ptr, size_t size);例如,你第一次用 malloc 函数 动态分配了空间,随着一步步运算,觉得空间不够,需要加大空间,与此同时,原先空间里的数据需保留并还要继续使用,这时需要用 realloc,它能满足此需要。下面是完整的程序例...

c语言中malloc函数的用法
malloc函数是C语言中的一种动态内存分配函数。它可以在程序运行时动态地分配内存空间,使程序具有更大的灵活性和可扩展性。使用malloc函数可以在程序运行时动态地分配内存空间。例如,下面的代码片段可以申请一个大小为10个整形变量大小(即40个字节)的连续内存空间,并将其首地址赋给指针变量p。在程序运行...

C语言关于MALLOC的用法
未能正确释放已不再使用的内存空间。当程序中存在大量未释放的内存空间时,会逐渐消耗系统的可用内存,最终导致程序运行缓慢或崩溃。总之,malloc是C语言中实现动态内存分配的工具,它允许程序根据需要灵活地分配和释放内存空间。正确使用malloc和free函数可以有效管理内存,提高程序的性能和稳定性。

c语言动态数组如何扩充空间
c语言动态数组扩充空间,主要是利用动态存储分配库函数来实现的,常用的有malloc函数和calloc函数。malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。例如...

C语言中,怎么使用malloc函数为数组指针分配空间 比如要为char *p...
char (*pa)[10]; \/\/定义一个指向拥有10元素的字符数组的指针,int (*p)[10];应用格式可以参考下述程序,申请空间、赋值、输出后,可以观察到100被赋值到第五行第十个元素,指针可以像二维数组一样通过两个下标引用所申请开设的空间。include<alloc.h> main(){ int (*p)[10];int i,j,k;...

c语言中malloc是什么?怎么用?
说明:【参数说明】size 为需要分配的内存空间的大小,以字节(Byte)计。【函数说明】malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用 calloc() 函数。【返回值】分配成功返回指向...

一个C语言写的程序最多能申请到的malloc空间是多少?
malloc是开辟一个连续的空间,可能你电脑里没有连续的5M空间存在吧,所以会崩溃,就比方你开一个10000*10000的int型数组页可能会报错一样吧。

相似回答