具有范围和全局变量的Malloc #包括 #包括 结构节点{ int-num; 结构节点*下一步; }*head=NULL,*curr=NULL; 作废打印(){ curr=头; while(curr!=NULL){ printf(“%d\n”,curr->num); 当前=当前->下一步; } } 结构节点*memAlo(){ 返回(结构节点*)malloc(sizeof(结构节点)); } void addNode(内部编号){ curr=头; while(curr!=NULL){ 当前=当前->下一步; } curr=memAlo(); if(curr==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ 当前->数量=否; 当前->下一步=空; printf(“%d\n”,curr->num); } } void hellop(){ printf(“%d”,head->num); } int main(){ int i; curr=头; 对于(i=1;inum=1; head->next=NULL; hellop()*/ }
我肯定我在某个地方搞砸了。问题是头指针没有得到memAlo()fn()分配的内存,但是如何到达那里?请帮助具有范围和全局变量的Malloc #包括 #包括 结构节点{ int-num; 结构节点*下一步; }*head=NULL,*curr=NULL; 作废打印(){ curr=头; while(curr!=NULL){ printf(“%d\n”,curr->num); 当前=当前->下一步; } } 结构节点*memAlo(){ 返回(结构节点*)malloc(sizeof(结构节点)); } void addNode(内部编号){ curr=头; while(curr!=NULL){ 当前=当前->下一步; } curr=memAlo(); if(curr==NULL){ printf(“\n内存向上\n”); 返回; } 否则{ 当前->数量=否; 当前->下一步=空; printf(“%d\n”,curr->num); } } void hellop(){ printf(“%d”,head->num); } int main(){ int i; curr=头; 对于(i=1;inum=1; head->next=NULL; hellop()*/ },c,malloc,C,Malloc,我肯定我在某个地方搞砸了。问题是头指针没有得到memAlo()fn()分配的内存,但是如何到达那里?请帮助 我尝试的是创建一个包含从1到9的数字的单链接列表,并使用print()打印它们。实际上,AddNode()是每次在main()中的for循环时在链接列表的末尾创建一个节点执行。分配节点的代码错误。它应该创建一个节点,为其留出一些空间,然后返回 #include<stdio.h> #include<stdlib.h> struct node { int num;
我尝试的是创建一个包含从1到9的数字的单链接列表,并使用print()打印它们。实际上,AddNode()是每次在main()中的for循环时在链接列表的末尾创建一个节点执行。分配节点的代码错误。它应该创建一个节点,为其留出一些空间,然后返回
#include<stdio.h>
#include<stdlib.h>
struct node {
int num;
struct node *next;
}*head=NULL, *curr=NULL;
void print(){
curr = head;
while(curr != NULL){
printf("%d\n", curr->num);
curr = curr->next;
}
}
struct node* memAlo(){
return (struct node *)malloc(sizeof(struct node));
}
void addNode(int no){
curr = head;
while(curr != NULL){
curr = curr->next;
}
curr = memAlo();
if(curr == NULL){
printf("\nmemory up\n");
return;
}
else{
curr->num = no;
curr->next = NULL;
printf("%d\n",curr->num);
}
}
void hellop(){
printf("%d", head->num);
}
int main(){
int i;
curr = head;
for(i=1;i<10;i++){
addNode(i);
}
print();
/*head = memAlo();
head->num = 1;
head->next = NULL;
hellop();*/
}
这将创建一个指向节点的指针,正确分配它,然后返回它。问题我看到:
head==NULL
时curr=memAlo()
为节点分配内存并将其返回给您,但它不会将节点与其他任何内容连接
struct node *memAlo() {
struct node *nd = malloc(sizeof(*nd));
return nd;
}
void addNode(内部编号){
结构节点*temp=NULL;
//处理一张空名单。
if(head==NULL)
{
head=memAlo();
头部->数量=否;
head->next=NULL;
}
//移动curr直到到达列表的最后一个节点。
curr=头;
while(当前->下一步!=NULL){
当前=当前->下一步;
}
temp=memAlo();
if(temp==NULL){
printf(“\n内存向上\n”);
返回;
}
否则{
//将新节点链接到上一个节点。
温度->数值=否;
temp->next=NULL;
printf(“%d\n”,temp->num);
当前->下一步=温度;
}
}
似乎由于
head
最初是NULL
,然后您开始分配节点而不保存第一个节点的地址,因此您丢失了第一个节点的地址,然后无法从头开始遍历列表
你注释掉的部分说明了这个问题
作为旁注,您的程序中没有
空闲
。请记住始终释放您alloc
设置的head=NULL
的内存。在您第一次定义head
的位置,我们在您的程序中的任何位置都不会看到head
位于=/code>的左侧gram.所以当然head
总是等于NULL
而不是其他任何东西
您可能希望在addNode
函数的开头插入一些代码,以测试该点的head==NULL
;如果这是真的,您将希望分配memAlo()的结果
到头部
而不是当前
。您还必须调整一些其他逻辑。#包括
void addNode(int no){
struct node* temp = NULL;
// Deal with an empty list.
if ( head == NULL )
{
head = memAlo();
head->num = no;
head->next = NULL;
}
// Move curr until we reach the last node of the list.
curr = head;
while(curr->next != NULL){
curr = curr->next;
}
temp = memAlo();
if(temp == NULL){
printf("\nmemory up\n");
return;
}
else{
// Link the new node to the previous last node.
temp->num = no;
temp->next = NULL;
printf("%d\n",temp->num);
curr->next = temp;
}
}
#包括
结构节点
{
int-num;
结构节点*下一步;
};
结构节点*head,*curr;
结构节点*pos;
void addNode(int n)
{
if(head==NULL)
{
head=(结构节点*)malloc(sizeof(结构节点));
头部->数量=n;
head->next=NULL;
curr=头;
}
其他的
{
while(curr!=NULL)
{
pos=当前;
当前=当前->下一步;
}
curr=(结构节点*)malloc(sizeof(结构节点));
curr->num=n;
当前->下一步=空;
pos->next=当前;
}
}
作废打印列表()
{
curr=头;
while(curr!=NULL)
{
printf(“%d”,curr->num);
当前=当前->下一步;
}
}
int main()
{
head=NULL;
curr=头;
int i,a[]={4,5,1,2,3,9,0};
对于(i=0;i)您的问题描述非常模糊。从您的描述中不清楚发生了哪些不应该发生的事情,哪些不应该发生。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int num;
struct node *next;
};
struct node *head, *curr;
struct node *pos;
void addNode(int n)
{
if(head==NULL)
{
head = (struct node*)malloc(sizeof(struct node));
head->num = n;
head->next = NULL;
curr = head;
}
else
{
while(curr != NULL)
{
pos = curr;
curr = curr->next;
}
curr = (struct node*)malloc(sizeof(struct node));
curr->num = n;
curr->next = NULL;
pos->next = curr;
}
}
void printList()
{
curr = head;
while(curr != NULL)
{
printf("%d",curr->num);
curr = curr->next;
}
}
int main()
{
head = NULL;
curr = head;
int i, a[] = {4,5,1,2,3,9,0};
for(i=0;i<7;i++)
{
addNode(a[i]);
}
curr = head;
printList();
}