小编mat*_*ots的帖子

我有可能知道我是否在C中正确清理过?

我的代码看起来像,

#include<stdlib.h>
#include<string.h>
char** someArray = NULL;
size_t numberOfEntriesInArray = 0;
void addToArray(char* someString){
  someArray = realloc(someArray, (numberOfEntriesInArray+1) * sizeof(char*));
  someArray[numberOfEntriesInArray] = malloc( (strlen(someString) + 1) * sizeof(char) );
  strcpy(someArray[numberOfEntriesInArray], someString);
  numberOfEntriesInArray++;
}
void deleteSomeArray(){
  int i;
  for (i = 0; i < numberOfEntriesInArray; i++){
    free(someArray[i]);
  }
  free(someArray);
}
int main(){
  addToArray( .. );
  ..
  deleteSomeArray();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我知道deleteSomeArray它运作正常?即有没有办法检查是否还有更多需要释放的内存?

PS

如果我在程序中泄漏了内存,那么当程序死掉时内存会自动释放吗?如果没有,有没有办法得到泄露的记忆?

c memory-leaks memory-management

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

在Java中初始化编译时已知的静态类变量

我想在Java中初始化一个静态的Class变量:

public class NumberExpression {
    private static Class numberClass = Class.forName("java.lang.Number");
};
Run Code Online (Sandbox Code Playgroud)

上面的代码段不起作用,因为Class.forName抛出一个ClassNotFoundException.类似的东西new Integer().getClass()不起作用,因为它Number是一个抽象类.

我想我可以用Class.forName一个处理它的静态方法ClassNotFoundException,但是有更优雅/标准的方法来获得我想要的东西吗?

编辑:

(类"Number"更改为"java.lang.Number")

java reflection class

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

如何在 Go 中逐个迭代一对字符串 rune?

遍历两个字符串并逐个比较它们的惯用 Go 方式是什么?

鉴于我对 Go 的理解有限,一个简单的方法是这样的:

arunes := []rune(astr)
brunes := []rune(bstr)
for i, a := range arunes {
  b := brunes[i]
  // do something with a and b
}
Run Code Online (Sandbox Code Playgroud)

当其工作正常astrbstr短或全扫描无论如何需要,但是当它们长有早破环的机会很高,这可能是低效的,因为从我的理解,[]rune(..)需要串进行全面扫描。特别是,如果字符串很长,而我只需要查看,例如两个字符串的前 1%,我想避免扫描整个字符串。

(我的第一个想法是对于某种zip,但 afaik,这在 Go 中不存在,并且由于缺乏泛型,无论如何函数签名看起来真的很糟糕 - 但如果 Go 确实有一个很好的干净替代品zip,我会非常高兴和兴奋地了解它)

TL;DR 是否有一种惯用的 Go 方法来迭代成对的字符串中的符文,同时在只需要查看两个字符串中的一小部分时仍然有效?

go

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

在C中初始化一个大的二维数组

我想初始化以下所有元素:

char buffer[1000][1000];
Run Code Online (Sandbox Code Playgroud)

' '.

我试过了

char buffer[1000][1000] = { ' ' };
Run Code Online (Sandbox Code Playgroud)

char buffer[1000][1000] = { { ' ' } };
Run Code Online (Sandbox Code Playgroud)

但这两种方式似乎只是初始化第一个任期.

我愿意考虑完成工作的替代方法,但我宁愿避免在main中编写这种初始化代码,甚至是单独的初始化方法.

c initialization multidimensional-array

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

Scala`map`,但在`Failure`退出

如果我有一个Seq,我可以解决map它。

val ss = Seq("1", "2", "3")
println(ss.map(s => s.toInt))  // List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

但是有时,传递给您的功能map可能会失败。

val ss = Seq("1", "2", "c")
println(ss.map(s => try { Success(s.toInt) } catch { case e: Throwable  => Failure(e) }))  // List(Success(1), Success(2), Failure(java.lang.NumberFormatException: For input string: "c"))
Run Code Online (Sandbox Code Playgroud)

最后一个将返回Seq[Try[Int]]。我真正想要的是一个Try[Seq[Int]],如果映射中的任何一个是Failure,它将停止迭代并返回Failure。如果没有错误,我希望它只返回从拆包的所有转换后的元素Try

Scala的惯用方式是什么?

scala

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