小编oct*_*bus的帖子

为什么我的程序在使用堆分配的内存时会抛出分段错误?

在编写一个程序来反转一个字符串后,我无法理解为什么在尝试反转字符串时出现了seg故障.我在下面列出了我的程序.

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

void reverse(char *);

int main() {
  char *str = calloc(1,'\0');
  strcpy(str,"mystring0123456789");
  reverse(str);
  printf("Reverse String is: %s\n",str);
  return 0;
}

void reverse(char *string) {
  char ch, *start, *end;
  int c=0;
  int length = strlen(string);
  start = string;
  end = string;

  while (c < length-1){
    end++;
    c++;
  }
  c=0;

  while(c < length/2){
    ch = *end;
    *end = *start;
    *start = ch;
    start++;
    end--;
    c++;
  }
}
Run Code Online (Sandbox Code Playgroud)

第一个问题:

即使我只将1个字节的内存分配给char指针str(calloc(1,'\0')),并且我将18个字节的字符串复制mystring0123456789到其中,并且它没有抛出任何错误,并且程序在没有任何SEGFAULT的情况下工作正常.

为什么我的程序没有抛出错误?理想情况下它应该抛出一些错误,因为它没有任何内存来存储那个大字符串.有人可以对此有所了解吗?

该程序运行完美,并给我输出Reverse …

c memory-management char-pointer

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

无法填充Perl字符串数组而不增加数组长度

我有一个整数值my $reading = 1200;.

我有一个阵列 my @DigitField = "000000000";

我想用$reading's值替换数组的右边4个元素,我想用编程方式使用Perl的长度函数,如下所示.

我试过了.

my @DigitField = "000000000";
my $reading = 1200;
splice @DigitField, length(@DigitField) + 1, length $reading, $reading;
print @DigitField;
Run Code Online (Sandbox Code Playgroud)

但我得到了

0000000001200

我希望字符串保持九个字符宽.

有什么其他方法可以替换部分Perl字符串数组?

perl

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

(使用'korma.db)指令有什么问题?

当我尝试使用以下非常简单的Clojure测试文件使用lein创建一个uberjar时,我收到一个错误

Compiling korma-test.core
Exception in thread "main" java.lang.Exception: 
lib names inside prefix lists must not contain periods, compiling:(core.clj:1:1)
Run Code Online (Sandbox Code Playgroud)

并无法弄清楚为什么.我(use 'korma.db)sqlkorma.com的docs部分得到了,并尝试了一个require语句(这里没有列出我的例子).

project.clj

(defproject korma-test "0.1.0-SNAPSHOT"
  :description "korma db test"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [korma "0.3.0-RC5"]]
   :main korma-test.core)
Run Code Online (Sandbox Code Playgroud)

core.clj(简化)

(ns korma-test.core
  (:gen-class)
  (use 'korma.db)
  (require '[clojure.string :as str])
  (:import java.util.Date)
)

(defn -main 
  [& args]
  (let [opts (parse-opts args)
        start-time (str (Date.))]))
Run Code Online (Sandbox Code Playgroud)

clojure leiningen korma

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

Python"if"语句语法错误

我对我得到的错误感到困惑.

我的代码如下:

result = getString(argument_x)
print result # it returns "PASS"
if result ="PASS"
Run Code Online (Sandbox Code Playgroud)

当我尝试启动它时,它显示最后一行的错误:

SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

python syntax if-statement

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

为什么读取循环跳过线?

我不知道为什么我的读取文件循环正在跳过行.

我正在尝试在python中编写一个简单的程序来解析txt文档,然后再在另一个文档中运行它.我本质上拥有的是一个看起来像三角形的文本文件,我正在尝试将其解析为列表中的列表,即

1

2 3

4 5 6

7 8 9 10
Run Code Online (Sandbox Code Playgroud)

[[1],[2,3],[4,5,6],[7,8,9,10]]
Run Code Online (Sandbox Code Playgroud)

但是,在我的下面的代码中,我的while循环似乎是"跳过"其他所有行,所以不是得到上面的列表,我得到类似的东西[[2,3],[7,8,9,10]].更令人费解的是,如果我注释掉最后一行,while循环将打印'1'完全正确的次数

f = open('test.txt')
triangle = []

while f.readline() != '':
    print 1
    triangle.append(map(int,f.readline().strip().split()))
Run Code Online (Sandbox Code Playgroud)

python

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