问题列表 - 第14874页

具体来说,铸造malloc的结果有什么危险?

现在在人们开始将它标记为dup之前,我已经阅读了以下所有内容,其中没有一个提供我正在寻找的答案:

  1. C FAQ:转换malloc的返回值有什么问题?
  2. SO:我应该显式地转换malloc()的返回值吗?
  3. SO:在C中不必要的指针转换
  4. SO:我是否施放了malloc的结果?

C FAQ和上述问题的许多答案都引用了一个神秘的错误,即铸造malloc的返回值可以隐藏; 但是,它们都没有在实践中给出这种错误的具体例子.现在要注意我说的错误,而不是警告.

现在给出以下代码:

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

int main(int argc, char** argv) {

    char * p = /*(char*)*/malloc(10);
    strcpy(p, "hello");
    printf("%s\n", p);

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

用gcc 4.2编译上面的代码,有和没有强制转换都会给出相同的警告,并且程序正确执行并在两种情况下都提供相同的结果.

anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc
nostdlib_malloc.c: In function ‘main’:
nostdlib_malloc.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
anon@anon:~/$ ./nostdlib_malloc 
hello
Run Code Online (Sandbox Code Playgroud)

那么,任何人都可以提供一个特定的代码示例,说明由于转换malloc返回值而可能发生的编译或运行时错误,或者这仅仅是一个城市传奇?

编辑我在这个问题上遇到了两个写得很好的论点:

  1. 利于强制转换:CERT建议:立即将内存分配函数调用的结果转换为指向已分配类型的指针
  2. 反对强制转换 (截至2012-02-14的404错误:使用2010-01-27中的互联网归档Wayback Machine副本.{2016-03-18:"由于robots.txt而无法抓取或显示页面."})

c

85
推荐指数
5
解决办法
2万
查看次数

Perforce P4J获取目录的更改列表

我正在尝试使用P4J获取目录上的更改列表.这是我用过的片段,

P4JServer server = //get a valid server using username/pwd
List<P4JFileSpec> fileSpec = P4JFileSpecBuilder.makeFileSpecList(new String[]{"//depot/se/mydir"}); //a valid directory
if(P4JFileSpecBuilder.getValidFileSpecs(fileSpec).isEmpty()) {
    throw new RuntimeException("File spec invalid for [" + depotPath + "]"); 
}
List<P4JChangeList> changes = server.getChangeLists(10, fileSpec, null, null, true, true, false, true);
System.out.println(changes.size()); //prints 0 here   
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用"// depot/se/myfile"这是一个有效的文件,则打印更改列表.难道我做错了什么?我需要一个目录上的变更列表.

perforce p4java

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

最简洁的方法将ListBox.items转换为通用列表

我正在使用C#并以.NET Framework 3.5为目标.我正在寻找一个小的,简洁而有效的代码片段来将ListBox中的所有项目复制到List<String>(通用列表).

目前我有类似下面的代码:

        List<String> myOtherList =  new List<String>();
        // Populate our colCriteria with the selected columns.

        foreach (String strCol in lbMyListBox.Items)
        {
            myOtherList.Add(strCol);
        }
Run Code Online (Sandbox Code Playgroud)

当然,这是有效的,但我不禁感到必须有更好的方法来使用一些较新的语言功能.我在考虑像List.ConvertAll方法,但这仅适用于通用列表而不适用于ListBox.ObjectCollection集合.

c# generics collections type-conversion

58
推荐指数
3
解决办法
6万
查看次数

在Ruby中将大型哈希划分为N个较小哈希的最有效方法是什么?

问题


我正在研究涉及分片的问题.作为问题的一部分,我需要找到以两个或更多部分划分大型Ruby哈希(> 200,0000个条目)的最快方法.

  • 有没有非O(n)方法?

  • 是否有非Ruby即C/C++实现?

请不要使用将哈希转换为数组并重建N个不同哈希的简单方法回答示例.

我担心的是Ruby太慢而无法完成这类工作.


最初的方法


这是我尝试的第一个解决方案.吸引人的是:

  • 它不需要在哈希中盲目循环
  • 它不需要管理计数器来在分片中均匀分配成员.
  • 它短而整洁

好吧,它不是O(n),但它依赖于标准库中的方法,我认为这比编写自己的Ruby代码要快.


pivot = s.size / 2

slices = s.each_slice(pivot)

s1 = Hash[*slices.entries[0].flatten]

s2 = Hash[*slices.entries[1].flatten]
Run Code Online (Sandbox Code Playgroud)


更好的解决方案

马克和迈克非常友好地提出方法.我不得不承认马克的方法感觉不对 - 它完全按照我不想要的方式行事 - 它对所有成员进行了循环并评估了有条件的情况 - 但是因为他花时间去做评估,我想我应该尝试类似的方法和基准测试.这是他的方法的改编版本(我的密钥不是数字所以我不能逐字逐句采用他的方法)

def split_shard(s)
    shard1 = {}
    shard2 = {}


    t = Benchmark.measure do
        n = 0

        pivot = s.size / 2

        s.each_pair do |k,v|
            if n < pivot
                shard1[k] = v
            else
                shard2[k] = v
            end

            n += 1
        end
    end

    $b += t.real
    $e += …
Run Code Online (Sandbox Code Playgroud)

ruby algorithm hash

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

在Java中,以字符形式"构建"和使用字符串的最快方法是什么?

我有一个间歇性地接收数据的Java套接字连接.每次突发接收的数据字节数不同.数据可以或可以不由众所周知的字符(例如CR或LF)终止.每个数据突发的长度是可变的.

我正在尝试从每个数据突发中构建一个字符串.构建一个稍后需要解析的字符串的最快方法(速度,而不是内存)是多少?

我开始使用字节数组来存储传入的字节,然后将它们转换为每个突发的字符串,如下所示:

byte[] message = new byte[1024];
...
message[i] = //byte from socket
i++;
...
String messageStr = new String(message);
...
//parse the string here
Run Code Online (Sandbox Code Playgroud)

这样做的明显缺点是一些突发可能比1024更长.我不想随意创建一个更大的字节数组(如果我的突发更大会怎么样?).

这样做的最佳方式是什么?我应该创建一个StringBuilder对象并追加它()吗?这样我就不必将StringBuilder转换为String(因为前者有我需要的大部分方法).

再次,执行速度是我最关心的问题.

TIA.

java string variables byte

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

动态创建范围保护

我已经在DDJ中阅读了关于范围保护的文章(通用:改变你编写异常安全代码的方式 - 永远),我理解它们的常用用法.

但是,常见的用途是在堆栈上为特定操作实例化特定堆栈保护,例如:

{
    FILE* topSecret = fopen("cia.txt");
    ON_BLOCK_EXIT(std::fclose, topSecret);
    ... use topSecret ...
} // topSecret automagically closed
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在运行时安排清理操作,例如当我有一个循环时,该怎么办:

{
   vector<FILE*> topSecretFiles;
   for (int i=0; i<numberOfFiles; ++i)
   {
      char filename[256];
      sprintf(filename, "cia%d.txt", i);
      FILE* topSecret = fopen(filename);
      topSecretFiles.push_back(topSecret);
      ON_BLOCK_EXIT(std::fclose, topSecret); // no good
   }
}
Run Code Online (Sandbox Code Playgroud)

显然,上面的例子不起作用,因为topSecret它将与for范围一起关闭.我想要一个范围保护模式,我可以很容易地排队清理操作,我确定在运行时需要它.有这样的东西吗?

我无法将范围保护对象推入标准队列,导致原始对象(我正在推送的对象)在此过程中被解除.如何推送堆分配的堆栈保护并使用在dtor上删除其成员的队列?有没有人有更聪明的方法?

c++ design-patterns scopeguard

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

在世界地图上绘制GeoIP数据

我需要一个能够获取一系列IP地址(或地理坐标)并在世界地图上绘制它们的库(最好用Python编写).

我已经找到了这个,但是它将数据输出为.svg文件,它根本无法处理大型数据集.

请注意,我需要一些可以在本地下载和运行的内容,因此没有数据上传到第三方Web服务.

谢谢!

python maps plot geolocation

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

python csv帮助

有时我需要解析CSV的字符串,但是我遇到麻烦的引用昏迷.正如此代码所示.我正在使用python 2.4

import csv
for row in csv.reader(['one",f",two,three']):
    print row
Run Code Online (Sandbox Code Playgroud)

我得到4个元素['one"','f"','two','three']但是我想得到这个['one",f"','two','three']或3个元素即使我尝试使用quotechar ='"'选项(这是根据文档默认值)仍然相同,我怎么能忽略引号中的昏迷?

编辑:谢谢大家的答案显然我把我的输入误认为是CSV,最后我解析了strig的键值(NAME,DESCR ......)

这是输入

名称:"2801 chassis",DESCR:"2801 chassis,Hw Serial#:xxxxxxx,Hw Revision:6.0",PID:CISCO2801,VID:V03,SN:xxxxxxxxx

python csv

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

在调试时使用反汇编语言在什么情况下有用

我有以下基本问题:

  • 何时我们应该在调试中涉及反汇编

  • 如何解释反汇编,例如下面每个段代表什么

00637CE3 8B 55 08             mov         edx,dword ptr [arItem]
00637CE6 52                   push        edx
00637CE7 6A 00                push        0
00637CE9 8B 45 EC             mov         eax,dword ptr [result]
00637CEC 50                   push        eax
00637CED E8 3E E3 FF FF       call        getRequiredFields (00636030)
00637CF2 83 C4 0C             add 
Run Code Online (Sandbox Code Playgroud)

语言:C++

平台:Windows

c++ debugging disassembly

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

用jquery最接近()遍历td/tr

<td width="162"><span class="required">*</span> Name:</td>
<td width="407">
    <label>
        <input id="store_name" class="text_field alnum" type="text" minlength="3"
        maxlength="30" size="40" name="store_name" style="color: rgb(51, 51, 51);"/>
    </label>
</td>
<td class="char_count_area" style="color: green;"/>
Run Code Online (Sandbox Code Playgroud)

我有一些jQuery代码,如下所示:

$('.text_field').each(function(){
        $(this).keyup(function(){                 
            $(this).parent().parent().parent().find('.char_count_area').html(remainingChars); 
....
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我想达到char_count_areatext_field一个相当低效的方式.它可以工作,但如果我略微改变表格设计会很疯狂.我试过用了

$(this).closest('.char_count_area').html(remainingChars)
Run Code Online (Sandbox Code Playgroud)

但它不起作用(字符不会出现).

我怎样才能实现这个目的closest

jquery jquery-selectors closest

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