小编dan*_*705的帖子

正确使用realloc()

从man realloc:realloc()函数返回一个指向新分配的内存的指针,该内存适用于任何类型的变量,可能与ptr不同,如果请求失败则为NULL.

所以在这段代码中:

ptr = (int *) malloc(sizeof(int));
ptr1 = (int *) realloc(ptr, count * sizeof(int));
if(ptr1 == NULL){           //reallocated pointer ptr1
    printf("Exiting!!\n");
    free(ptr);
    exit(0);
}else{
    free(ptr);          //to deallocate the previous memory block pointed by ptr so as not to leave orphaned blocks of memory when ptr=ptr1 executes and ptr moves on to another block
    ptr = ptr1;         //deallocation using free has been done assuming that ptr and ptr1 do not point to the same address                     
}
Run Code Online (Sandbox Code Playgroud)

仅仅假设重新分配的指针指向不同的记忆块而不是同一个块就足够了.因为如果假设变为false并且realloc返回ptr指向的原始内存块的地址然后free(ptr)执行(由于评论中给出的原因)然后内存块将被删除,程序将疯狂.我应该放入另一个条件来比较ptr和ptr1的相等性并排除执行free(ptr)语句吗?

c memory-leaks realloc calloc dynamic-memory-allocation

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

AST或字节码.哪个更容易优化?

所以我正在制作一个小玩具编程语言解释器,我想尝试优化代码,以便字节码稍微小一点.我不打算进行非常复杂的优化,例如循环提升,但更简单的优化,例如常量折叠.

我的问题是,首先生成AST,优化它,然后转换为字节码,或直接转换为字节码,然后尝试优化它是否更好?

如果任何人有任何示例或知道编程语言执行这些方法之一,将不胜感激.

提前致谢.

c optimization interpreter programming-languages compiler-optimization

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

对角线(之字形)遍历中坐标的索引

所以我有一个 4x4 矩阵,如下所示

 |0 1 2 3
-+-------
0|0 1 3 6
1|2 4 7 a
2|5 8 b d
3|9 c e f
Run Code Online (Sandbox Code Playgroud)

我按照其中的十六进制字符指定的顺序遍历它。所以从 (0, 0) 开始,然后是 (1, 0)、(0, 1)、(2, 0)、(1, 1)、(0, 2)...

所以这是代码:

def diagonal(n):
    for a in range(n):
        for b in range(a + 1):
            yield a - b, b
    for a in range(n - 1):
        for b in range(n - a - 1):
            yield n - b - 1, b + 1 + a
Run Code Online (Sandbox Code Playgroud)

迭代此给出

for x, …
Run Code Online (Sandbox Code Playgroud)

python matrix

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

这个robots.txt语法是否为空"Disallow:"是否正确?

今天在改进我的网络爬虫以支持robots.txt标准的同时,我在http://www.w3schools.com/robots.txt上看到了以下代码.

User-agent: Mediapartners-Google 
Disallow: 
Run Code Online (Sandbox Code Playgroud)

这种语法是否正确?不应该是Disallow: /Allow: /取决于预期的目的?

robots.txt

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

制作维基百科链接树

我正在尝试使用维基百科 API 来获取所有页面上的所有链接。目前我正在使用

https://en.wikipedia.org/w/api.php?format=json&action=query&generator=alllinks&prop=links&pllimit=max&plnamespace=0

但这似乎并不是从第一篇文章开始到最后一篇文章结束。我怎样才能让它生成所有页面及其所有链接?

wikipedia graph wikipedia-api

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

为什么Python数据类型在Python提示符中表现如此?

在终端弄乱python时,我发现了一些奇怪的东西.如果你输入一个像这样的表达式1+2*3,终端将输出7,这很奇怪,因为这不应该打印任何东西,但确实如此.但是如果你使用诸如print("hello world")之类的函数,它将输出hello world,而不是Noneprint返回的内容.此外,键入True输出TrueFalse输出False,但键入None不输出任何内容.python如何决定何时输出值?

python terminal python-3.x read-eval-print-loop

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

构建解释器:设计 AST

所以我正在为我正在制作的类似于 Python 的语言制作一个解释器。现在我明白这不是一个小任务,我不希望它工作得很好或做很多事情,但我希望它有一些基本功能(变量、函数、循环、if 语句等......)。

所以目前我正处于解释器获取文件并将其拆分为令牌列表的阶段,现在我准备将这些令牌转换为 AST。我打算用递归下降解析器来做到这一点,我相信我理解,但这就是问题。假设我有以下输入

1 + 2 * 3
Run Code Online (Sandbox Code Playgroud)

这将输出 7,因为使用 BIDMAS 首先完成乘法,所以

2 * 3 = 6
Run Code Online (Sandbox Code Playgroud)

然后添加完成后

1 + 6 = 7
Run Code Online (Sandbox Code Playgroud)

我知道如何获得这个订单,因为我有一个简单的语法,但我不知道如何将其存储为 AST。为了简化答案,我们假设这是您将收到的唯一输入,并且语法可以是

program = add
add = mul {"+" mul}
mul = NUM {"*" NUM}
Run Code Online (Sandbox Code Playgroud)

那么基本上,如何创建一个数据结构来存储 AST?

PS我是用C做的。

c compiler-construction grammar interpreter abstract-syntax-tree

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

AES填充模糊

我一直在用C语言实现AES,现在我正在通过实现填充来完成程序.阅读关于填充主题的许多其他SO问题我发现,一种流行的方法是通过填充州内剩余的每个地方剩下的地方数量.例如,如果我只有12个字节要加密,我会用4填充剩余的4个字节.我的问题是在解密时如果我有一个已满但是以1结尾的块,我怎么知道这是否是一个字节的填充或只是值1?

免责声明:我知道这个程序永远不应该用于生产,因为它可能有各种不同的不安全感.我这样做是为了好玩,而不是加密绝密文件.

encryption aes padding encryption-symmetric

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

如何解决C中的循环结构依赖

所以我有两个结构体,为了简单起见,我们将它们称为ABA包含一个指向 的指针B,并B包含一个A。所以这里是代码:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct _A {
    B *b;
} A;

#endif
Run Code Online (Sandbox Code Playgroud)

#ifndef B_H
#define B_H

#include "a.h"

typedef struct _B {
    A a;
} B;

#endif
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我从我的主 c 文件中导入 ah 时,我收到关于 A 是如何从 bh 未知类型的错误我不知道如何解决这个问题。

c struct circular-dependency include circular-reference

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