小编mgu*_*gus的帖子

在C中使用malloc进行内存分配

这是我的计划:

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

main(){
   char *p1, *p2, *p3, *p4;

   p1 = (char*)malloc(10);
   p2 = (char*)malloc(10);
   p3 = (char*)malloc(16);
   p4 = (char*)malloc(32);

   printf("p1 points at: %d\n", p1);
   printf("p2 points at: %d\n", p2);
   printf("p3 points at: %d\n", p3);
   printf("p4 points at: %d\n\n", p4);

   system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)

这会在我的电脑上产生以下输出:

p1点数:6492080

p2点数:6492104

p3点数:6492128

p4点数:6492152

因此,无论分配了多少字节,malloc分配的每个内存空间都会进一步开始24个字节.这是为什么?我感谢您的帮助!

c memory malloc pointers

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

C语言中Ackermann函数的替代实现

我在C中编写了一个程序,它计算用户输入的2个非负整数的Ackermann值.程序检查整数是否为非负数,如果是,则计算它们的Ackermann值,然后请求新的输入或退出.该程序在C中运行良好,我没有问题.这是我的代码:

int ackermann(int m, int n){
        if (m == 0) return n + 1;
        if (n == 0) return ackermann(m - 1, 1);
        return ackermann(m - 1, ackermann(m, n - 1));
}
Run Code Online (Sandbox Code Playgroud)

但事实上,对于大学课程的需要,我们使用C的修改版本(基本相同但具有一些不同的语法规则),它们模拟MIPS汇编语言的语法和规则.更具体地说,我们使用寄存器来操作除数组和结构之外的所有数据.此外,我们不能使用for,while或do-while循环,而是使用ifgoto语句.所以我用这种语言编写了以下程序(正如我所说的,它只不过是C语言不同).我的问题是它只适用于(x,0)和(0,y)用户输入(x和y是非负数).它不适用于(4,1),(3,2)和通常所有没有零的输入.据我所知,由于这些计算的大量堆栈,它不能像(10,10)这样非常大的数字有效地工作.但是我想让它适用于像Ackermann(3,1)== 13这样的简单输入.有关Ackermann函数的更多信息,请参阅:http://en.wikipedia.org/wiki/Ackermann_function 这是我的代码:

//Registers --- The basic difference from C is that we use registers to manipulate data
int R0=0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17,R18,R19,R20,R21,
R22,R23,R24,R25,R26,R27,R28,R29,R30,R31;

int ackermann(int m, int n){

    R4 = m;
    R5 = n;

    if(R4 != 0)
        goto outer_else;
    R6 = …
Run Code Online (Sandbox Code Playgroud)

c recursion assembly mips

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

这个C代码可以创建僵尸进程吗?

我想知道以下代码是否可以创建僵尸:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(){
    int i=1;
    pid_t p;
    p = fork();
    i++;
    if(p!=0){
        waitpid(p, NULL, 0);
    }
    printf("%d\n",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,父进程调用子进程的waitpid,如果子进程尚未退出,则立即返回.所以,到目前为止,没有僵尸可以出现.但是,如果孩子退出之前

return 0;
命令这将是一个僵尸呢?我其实很困惑.在程序终止之前,waitpid应该是最后一行代码吗?任何帮助,将不胜感激.谢谢!

c pid process zombie-process waitpid

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

用SQL计算平均年龄的函数[postgresql]

我正在尝试创建一个plpgsql函数来计算存储在另一个表中的id(整数)的某些人的平均年龄(以年为单位).

代码是:

begin

DROP TABLE  if EXISTS dates;
DROP TABLE  if EXISTS tmp;
DROP TABLE  if EXISTS ages;
CREATE TABLE ages (age integer);

--(...) In these lines, I create and fill the table tmp. I did not include this code
--since it's not very much related to my problem. Nevertheless, this table has only
--one integer column

CREATE TABLE dates AS (SELECT "dateofbirth" from person where "idPerson" in (select "bookedforpersonID" from personsofthistype));

UPDATE  ages  SET (age) = ((SELECT extract (year …
Run Code Online (Sandbox Code Playgroud)

sql postgresql average plpgsql pgadmin

4
推荐指数
1
解决办法
4096
查看次数

JButton,JCheckBox和类似的交互者不会在视觉上改变

这是一个简单的图形程序,可以在屏幕上添加一些星星.

import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * This program creates a five-pointed star every time the
 * user clicks the mouse on the canvas.
 */

public class DrawStarMap1 extends GraphicsProgram {

    public void init() {
        /* Initializes the mouse listeners */
        addMouseListeners();

        /* The check box starts out in the "on" position */
        fillCheckBox = new JCheckBox("Filled");
        fillCheckBox.setSelected(true);
        add(fillCheckBox, SOUTH);

        /* Clears the screen with a button */
        add(new JButton("Clear"), SOUTH);
        addActionListeners();   
    }

    /* Called whenever …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton jslider jcheckbox

3
推荐指数
1
解决办法
1451
查看次数

在Linux上用C如何生成大小为X的文件?

所以我想创建一个名为genData.c的文件,例如执行时:./ genData filename.txt会将1个字符写入该文件1000次.

实质上是创建1kb文件.我希望能够修改for循环,比如100000次,生成1MB文件等等.

这是我尝试过的,它编译但是在执行时会导致分段错误.

有什么建议?对不起C是我从未涉足过的语言.

#include <stdio.h>

int main (int argc, char *argv) {
    char ch = 'A';
    FILE *fp;
    fp = fopen(argv[1], "wb");
    int i;

    for (i = 0; i < 1000; i++) {
        fwrite(&ch, sizeof(char), 1, fp);
    }

    fclose(fp);

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

c linux file

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

C++ 函子用于比较的优势

我在这里看过很多文章,但在比较的情况下,仍然没有弄清楚函子类相对于简单函数的优势。所以我有一个代码摘录,他们想unsigned char *通过简单地遍历每个字符并从左到右比较具有优先级的 ASCII 代码来对向量进行排序。

函子是

class Sorter {
private:
    unsigned int length;
public:
    Sorter( unsigned int _length ): length( _length ) {}
    bool operator()( const unsigned char* keyl, const unsigned char* keyr ) { return cmpKey( keyl, keyr, length ); }
};
Run Code Online (Sandbox Code Playgroud)

并且该cmpKey()功能基本上执行我上面描述的操作。对数据进行排序的调用是

sort( localList.begin(), localList.end(), Sorter( 100 ) );
Run Code Online (Sandbox Code Playgroud)

其中 100 是每个字符串的长度。所以,我读过函子的优点是可以存储调用到调用的阶段,并允许将类用作普通函数。我有两个问题:

  1. 在这种情况下,这样做有什么好处?

  2. Sorter将创建多少个类实例?它是只有 1 还是与 的元素一样多locaList

c++ function functor stdvector

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