gpt4 book ai didi

c - 动态内存使用情况,C 中的列表

转载 作者:行者123 更新时间:2023-11-30 19:30:53 25 4
gpt4 key购买 nike

问题是我没有打印列表中的“F”总数,如果不打印给我以下消息:

Segment violation (`core 'generated)

我认为问题在于我在循环中移动的方式

#include <stdio.h>
#include <stdlib.h>
#define T 5

int menu();
struct nodo{
/*Declaración de los campos*/
char sexo;
struct nodo *sig; //Uso de sig como apuntador dentro de la lista al siguiente nodo
};
int tam= sizeof(struct nodo); //Se calcula el tamaño de bytes

int main(){

int i, totalf=0;
struct nodo *lista=(struct nodo *)malloc(tam ); //Se reserva la cantidad de memoria a usar
lista=NULL;
printf("\nPrograma que lee los sexos alumnos e imprima el numero de mujeres");

for(i=0; i<T; i++) //Ciclo para ingresar los datos
{
struct nodo *p =(struct nodo *) malloc(tam);
printf("\nIngrese el dato %d: ",i+1);
scanf(" %c", &(*p).sexo);
(*p).sig=lista;

}

for(i=0; i<T; i++)
{
struct nodo *p =(struct nodo *) malloc(tam);
p=lista;
if((*p).sexo =='F')
{
totalf=totalf+1;
}
}
printf("El total de mujeres es: %i\n", totalf);
}

最佳答案

您的代码中有很多问题,例如

  1. struct nodo *lista=(struct nodo *)malloc(tam );
    lista=NULL;
    这里首先分配内存,然后立即将其设置为 NULL,这没有任何作用,而是不要为 lista 分配任何内存。并初始化为NULL ,这将是您的headptr
  2. 其次是for(i=0; i<T; i++){ /*.. */ }没有建立黑白节点的链接。了解如何添加或链接节点。

这是工作中的,我在评论中添加了解释

struct nodo{
/*Declaración de los campos*/
char sexo;
struct nodo *sig; //Uso de sig como apuntador dentro de la lista al siguiente nodo
};
int tam= sizeof(struct nodo); //Se calcula el tamaño de bytes
int main(){

int i, totalf=0;
struct nodo *lista = NULL; /* this is your head pointer */

printf("\nPrograma que lee los sexos alumnos e imprima el numero de mujeres");

for(i=0; i<T; i++) {
struct nodo *p =(struct nodo *) malloc(tam); /* new node everytime */
printf("\nIngrese el dato %d: ",i+1);
scanf(" %c", &(*p).sexo); /* put daata into memory */
(*p).sig = lista; /* make new node next as head node */
lista = p; /*update the head node */

}
struct nodo *temp = lista; /* temp points to head node */
for(i=0; i<T; i++) {
if((*temp).sexo =='F'){ /* check temp data matches or not */
totalf=totalf+1;
}
temp = (*temp).sig; /* this you forget ? update temp */
}
printf("El total de mujeres es: %i\n", totalf);
return 0;
}

阅读任何一本优秀的 C 书籍来学习数据结构。

关于c - 动态内存使用情况,C 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49845796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com