小编max*_*use的帖子

在C中对链表进行排序

我试图通过找到最大值,从其位置删除它,然后将其插入列表顶部来对链表进行排序.

我遇到的困难是实际删除和插入顶部.问题似乎是在sortList函数中包含的while循环中的if条件,但我不确定如何修复它.

任何帮助,将不胜感激.

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int num;
    struct node *next;
} Node, *NodePtr;

void printList(NodePtr np);
NodePtr makeList(void);
NodePtr makeNode(int n);
NodePtr sortList(NodePtr list);

int main(void) {
    NodePtr list;
    printf("Enter numbers for the list (0 to end)\n");
    list = makeList();
    printList(list);
    list = sortList(list);
    printList(list);
    return 0;
}

NodePtr makeList(void) {
    NodePtr makeNode(int), np, top, last;
    int n;
    top = NULL;
    if(scanf("%d", &n) != 1)n = 0;
    while(n != 0) {
        np = makeNode(n);
        if(top …
Run Code Online (Sandbox Code Playgroud)

c sorting linked-list singly-linked-list

5
推荐指数
1
解决办法
6万
查看次数

C和内存使用情况中的malloc()

我正在尝试使用malloc进行实验,以查看是否可以分配所有可用内存。

我使用了以下简单程序,并有几个问题:

int main(void)
{
    char * ptr;
    int x = 100;

    while(1)
    {
        ptr = (char *) malloc(x++ * sizeof(char) / 2);
        printf("%p\n",ptr);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

1)为什么当使用较大的数据类型(int,unsigned long long int,long double)时,该进程将使用较少的内存,而使用较小的数据类型(int,char)将使用更多的内存?

2)运行程序时,它会在达到一定数量后停止分配内存(在Windows 7 64位系统上约为592mb,并将8GB RAM交换文件设置为系统托管)。如果输出为0,则表示NULL。为什么在达到此阈值后停止分配内存,而没有耗尽系统内存并进行交换?

我在以下文章中发现有人尝试与我做相同的事情,但是区别是他们没有看到内存使用方面的任何区别,但是我同意。 使用malloc的内存泄漏失败

我已经在Linux内核2.6.32-5-686上尝试过该代码,但结果相似。

任何帮助和解释将不胜感激。

谢谢,

c memory malloc memory-leaks memory-management

2
推荐指数
1
解决办法
4747
查看次数