现在在人们开始将它标记为dup之前,我已经阅读了以下所有内容,其中没有一个提供我正在寻找的答案:
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返回值而可能发生的编译或运行时错误,或者这仅仅是一个城市传奇?
编辑我在这个问题上遇到了两个写得很好的论点:
我正在尝试使用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"这是一个有效的文件,则打印更改列表.难道我做错了什么?我需要一个目录上的变更列表.
我正在使用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集合.
我正在研究涉及分片的问题.作为问题的一部分,我需要找到以两个或更多部分划分大型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) 我有一个间歇性地接收数据的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.
我已经在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上删除其成员的队列?有没有人有更聪明的方法?
我需要一个能够获取一系列IP地址(或地理坐标)并在世界地图上绘制它们的库(最好用Python编写).
我已经找到了这个,但是它将数据输出为.svg文件,它根本无法处理大型数据集.
请注意,我需要一些可以在本地下载和运行的内容,因此没有数据上传到第三方Web服务.
谢谢!
有时我需要解析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
我有以下基本问题:
何时我们应该在调试中涉及反汇编
如何解释反汇编,例如下面每个段代表什么
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
<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_area的text_field一个相当低效的方式.它可以工作,但如果我略微改变表格设计会很疯狂.我试过用了
$(this).closest('.char_count_area').html(remainingChars)
Run Code Online (Sandbox Code Playgroud)
但它不起作用(字符不会出现).
我怎样才能实现这个目的closest?