小编Sch*_*mer的帖子

调用malloc在gdb会话中失败

我正在尝试调试一个C程序,gdb告诉我在某个函数的第329行有一个段错误.所以我为该功能设置了一个断点,我试图逐步完成它.但是,每当我点击第68行时,我都会从gdb收到此投诉:

(gdb) step
68              next_bb = (basic_block *)malloc(sizeof(basic_block));
(gdb) step
*__GI___libc_malloc (bytes=40) at malloc.c:3621
3621    malloc.c: No such file or directory.
in malloc.c
Run Code Online (Sandbox Code Playgroud)

我不知道这意味着什么.该程序在除一组输入之外的所有输入上运行完美,因此在执行该程序的其他执行期间,对malloc的调用显然成功.当然,我有:

#include <stdlib.h>.
Run Code Online (Sandbox Code Playgroud)

这是源代码:

    // Block currently being built.
    basic_block *next_bb = NULL;
    // Traverse the list of instructions in the procedure.
    while (curr_instr != NULL)
    {
        simple_op opcode = curr_instr->opcode;
        // If we are not currently building a basic_block then we must start a new one.
        // A new block can be started with any kind …
Run Code Online (Sandbox Code Playgroud)

c malloc gdb

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

对部分排序的数组进行排序

可能重复:
采访问:排序几乎排序的数组(错误放置的元素不超过k)

我有一个部分排序的数组,其属性是每个元素都在其正确排序位置的d个单位内.我想知道是否有一种方法可以在不到n log n的时间内对这个数组进行排序 - 通过利用这一事实.

sorting algorithm

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

Python argparse:默认参数存储为字符串,而不是列表

我无法从文档中找出argparse的这种行为:

import argparse

parser.add_argument("--host", metavar="", dest="host", nargs=1, default="localhost", help="Name of host for database.  Default is 'localhost'.")
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)

这是带有和不带"--host"参数的输出:

>> python demo.py
Namespace(host='localhost')

>> python demo.py --host host
Namespace(host=['host'])
Run Code Online (Sandbox Code Playgroud)

特别是:为什么"--host"的参数在指定时存储在列表中,而不是在使用默认值时?

python command-line-arguments argparse

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

Java泛型:方法声明参数中的类型扩展

我正在学习Java Generics.我的理解是Generics按类型参数化集合.在Oracle教程中,有以下注释:

在通用代码中,称为通配符的问号(?)表示未知类型.

在下一页中,下面是参数中带有上限通配符的方法声明示例:

public void process(List<? extends Foo> list)
Run Code Online (Sandbox Code Playgroud)

鉴于此,我想知道为什么这个方法声明是非法的:

public void process(List<E extends Number> list)
Run Code Online (Sandbox Code Playgroud)

虽然这是合法的:

public <E extends Number> void process(List<E> list)
Run Code Online (Sandbox Code Playgroud)

java generics wildcard

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

Python正则表达式:贪婪模式返回多个空匹配

这种模式只是简单地抓取字符串中的所有内容,直到数据中的第一个潜在句子边界:

[^\.?!\r\n]*
Run Code Online (Sandbox Code Playgroud)

输出:

>>> pattern = re.compile(r"([^\.?!\r\n]*)")
>>> matches = pattern.findall("Australians go hard!!!") # Actual source snippet, not a personal comment about Australians. :-)
>>> print matches
['Australians go hard', '', '', '', '']
Run Code Online (Sandbox Code Playgroud)

来自 Python 文档:

re.findall(模式,字符串,标志= 0)

以字符串列表的形式返回字符串中模式的所有非重叠匹配项。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配项包含在结果中,除非它们触及另一个匹配项的开头。

现在,如果从左到右扫描字符串并且 * 运算符是贪婪的,那么返回的第一个匹配是整个字符串直到感叹号是完全合理的。但是,在消耗完那部分之后,我看不到该模式如何精确地产生四次空匹配,大概是通过在“d”之后向左扫描字符串。我确实理解 * 运算符意味着此模式可以匹配空字符串,我只是不知道它会如何在字母的尾随“d”和前导“!”之间多次执行此操作。的标点符号。

添加 ^ 锚点具有以下效果:

>>> pattern = re.compile(r"^([^\.?!\r\n]*)")
>>> matches = pattern.findall("Australians go hard!!!")
>>> print matches
['Australians go hard']
Run Code Online (Sandbox Code Playgroud)

由于这消除了空字符串匹配,它似乎表明所述空匹配发生在字符串的前导“A”之前。但这似乎与按照找到的顺序返回匹配项的文档相矛盾(前导“A”之前的匹配项应该排在第一位),而且恰好四个空匹配项让我感到困惑。

python regex pattern-matching

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

无法使用Z3生成模型

我在一个名为"knapsack.smt2"的文件中有背包问题的以下示例代码,我相信它是smt2格式,我有最新版本的Z3:

(declare-const s1 Int)
(declare-const o1 Int)
(declare-const b1 Bool)

(declare-const s2 Int)
(declare-const o2 Int)
(declare-const b2 Bool)

(declare-const s3 Int)
(declare-const o3 Int)
(declare-const b3 Bool)


(declare-const sack-size Int)
(declare-const filled Int)

(assert (< o1 sack-size))
(assert (< o2 sack-size))
(assert (< o3 sack-size))

(assert (>= o1 0))
(assert (>= o2 0))
(assert (>= o3 0))

(assert (=> (not b1)(= o1 o2)))
(assert (=> (not b2)(= o2 o3)))

(assert (=> b1 (= (+ o1 s1) o2)))
(assert (=> …
Run Code Online (Sandbox Code Playgroud)

z3

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

C++错误:类函数的多个定义

我在.h文件中有一个C++ classe,如下所示:

#ifndef __GLWidget_h__
#define __GLWidget_h__

class PivotShape
{
    // This is allowed
    void do_something() { std::cout << "Doing something\n"; }

    // This is not allowed
    void do_something_else();
}

// This is not allowed
void PivotShape::do_something_else()
{
    std::cout << "Doing something else\n";
}

#endif
Run Code Online (Sandbox Code Playgroud)

如果我在类声明中添加方法,一切似乎都很好.但是如果我在类声明之外添加方法,我会得到如下错误:

/usr/share/qt4/bin/moc GLWidget.h > GLWidget_moc.cpp
/programs/gcc-4.6.3/installation/bin/g++ -W -Wall -g -c -I./ -I/usr/include/qt4 GLWidget_moc.cpp
/programs/gcc-4.6.3/installation/bin/g++ main.o GLState.o GLWidget.o MainWindow_moc.o GLWidget_moc.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtOpenGL -lQtCore -lGLU -lGL -lm -ldl -o main
GLWidget.o: In function `std::iterator_traits<float const*>::iterator_category std::__iterator_category<float const*>(float …
Run Code Online (Sandbox Code Playgroud)

c++ linker compiler-errors makefile

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

如何在输入文件上调用Z3

我有一个文件包含:

(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(declare-const d Real)
(declare-const e Real)
(assert (> a (+ b 2)))
(assert (= a (+ (* 2 c) 10)))
(assert (<= (+ c b) 1000))
(assert (>= d e))
(check-sat)
(get-model)
Run Code Online (Sandbox Code Playgroud)

并且,根据在线教程,在此文件上运行z3应该返回:

sat
(model
    (define-fun c () Int
        (- 5))
    (define-fun a () Int
        0)
    (define-fun b () Int
        (- 3))
    (define-fun d ()
        Real 0.0)
    (define-fun e ()
        Real 0.0)
)
Run Code Online (Sandbox Code Playgroud)

所以我知道这是合法的Z3输入.但是,每当我运行"z3 [option]"时,无论选择何种选项,我得到的都是错误消息 - 包括无.有人能告诉我如何在输入文件上正确调用Z3吗?

问候.

z3

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

Java Generics:关于SO的示例说明

在另一篇SO帖子中,以下示例作为对OP的响应给出:

public static <E> void funct1(final List<E> list1, final E something)
{
    list1.add(something);
}

public static void funct2(final List<?> list, final Object something)
{
    list.add(something); // does not compile
}
Run Code Online (Sandbox Code Playgroud)

我已经验证了funct1编译,而funct2没有编译.但是,我无法弄清楚原因.

java generics

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

Python MySQLdb:在游标上迭代

在另一篇文章中,此代码:

connection = MySQLdb.connect(...)
cursor = connection.cursor()
cursor.execute("SHOW TABLES")
for (table_name,) in cursor:
    print(table_name)
Run Code Online (Sandbox Code Playgroud)

正确地迭代游标中的表名,而此代码是:

for table_name in cursor:
    print(table_name)
Run Code Online (Sandbox Code Playgroud)

返回以下形式的元素:

('some_table',)
Run Code Online (Sandbox Code Playgroud)

经过大量搜索,我无法理解这一点。有人可以解释其中的区别吗?我不能弄清楚究竟execute()返回什么。另外,我无法弄清楚为什么第一个迭代器的形式(使用括号和逗号)会起作用。

python iterator mysql-python

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

使用Perl的排列

我正在尝试编写一个简单的递归Perl例程来生成数组的所有排列.我没有任何提供例程的模块,我也无法安装它们.这是我到目前为止的代码:

sub permute
{
   my @array = @_;
   if (@array == 0)
   {
      return;
   }
   else
   {
      my $accum = "";
      my $result = permute_with_accumulator($accum, @array);
      return $result;
   }
}

sub permute_with_accumulator
{
   my ($accum, @array) = @_;
   if (@array == 1)
   {
      my $element = $array[0];
      $accum .= "$element,";
   }
   else
   {
      my $i;
      for ($i = 0; $i <= $#array; $i++)
      {
         $accum .= "$array[$i] ";
         my @new_array = ();
         if ($i == 0)
         {
            @new_array = @array[1..$#array]; …
Run Code Online (Sandbox Code Playgroud)

perl permutation

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

使用Perl生成组合

我需要编写一个Perl例程,它将生成给定集合的n个选择k组合.我不需要计算有多少套,我必须能够打印出来.我很难过.

任何建议表示赞赏.

问候.

perl combinatorics

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

在C++中删除新结构

我在C++代码中有错误的行为,似乎是由于动态创建的结构的错误释放造成的.结构形式如下:

typedef struct
{
    char *value;
} Element;

typedef struct
{
    int num;
    Element **elements;
    int *index;
} Container;
Run Code Online (Sandbox Code Playgroud)

它们是这样创建的:

Element *new_element(int size)
{
    Element *elem = new Element;
    elem->value = new char[size];
    return elem;
}

Container *new_container(int num)
{
    Container *cont = new Container;
    cont->num = num;
    cont->elements = new Element*[num];
    cont->index = new int[num];
}
Run Code Online (Sandbox Code Playgroud)

解冻这些的正确方法是什么?

c++ free struct memory-management delete-operator

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