动态内存使用情况,以C表示

时间:2018-04-15 19:11:24

标签: c list memory dynamic-memory-allocation

问题是我不打印列表中的" 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 个答案:

答案 0 :(得分:0)

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

  1. struct nodo *lista=(struct nodo *)malloc(tam ); lista=NULL;这里首先分配内存,然后立即将其设为NULL,这没有任何意义,而是不为lista分配任何内存并初始化为NULL,这将是是你的headptr
  2. 其次在for(i=0; i<T; i++){ /*.. */ }中没有建立b / w节点的链接。了解如何添加或链接节点。
  3. 这是工作人员,我在评论中提出了解释

    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书以学习数据结构。