我的代码看起来像,
#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
如果我在程序中泄漏了内存,那么当程序死掉时内存会自动释放吗?如果没有,有没有办法得到泄露的记忆?
我想在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")
遍历两个字符串并逐个比较它们的惯用 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)
当其工作正常astr和bstr短或全扫描无论如何需要,但是当它们长有早破环的机会很高,这可能是低效的,因为从我的理解,[]rune(..)需要串进行全面扫描。特别是,如果字符串很长,而我只需要查看,例如两个字符串的前 1%,我想避免扫描整个字符串。
(我的第一个想法是对于某种zip,但 afaik,这在 Go 中不存在,并且由于缺乏泛型,无论如何函数签名看起来真的很糟糕 - 但如果 Go 确实有一个很好的干净替代品zip,我会非常高兴和兴奋地了解它)
TL;DR 是否有一种惯用的 Go 方法来迭代成对的字符串中的符文,同时在只需要查看两个字符串中的一小部分时仍然有效?
我想初始化以下所有元素:
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中编写这种初始化代码,甚至是单独的初始化方法.
如果我有一个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的惯用方式是什么?