【发布时间】:2020-05-15 12:55:45
【问题描述】:
我正在从 dynamodb 获取数据并将数据转换为 parquet 文件。
为了转换为镶木地板文件,我使用https://github.com/xitongsys/parquet-go 库。但由于某种原因,我收到了runtime error: invalid memory address or nil pointer dereference
我知道这个错误意味着指针为 nil,我正在尝试使用它或取消引用它。
不知道为什么 pw.WriteStop() 给出内存无效错误
代码:
fw, err := local.NewLocalFileWriter(parquetFile)
if err != nil {
log.Errorf("local.NewLocalFileWriter() error - %s", err)
return err
}
pw, err := writer.NewParquetWriter(fw, new(Struct), int64(len(tenantList)))
if err != nil {
log.Errorf("writer.NewParquetWriter() error - %s", err)
return err
}
pw.RowGroupSize = 128 * 1024 * 1024 //128M
pw.CompressionType = parquet.CompressionCodec_SNAPPY
for _, data := range tenantList {
if err = pw.Write(data); err != nil {
return err
}
}
// this line gives memory invalid error
if err = pw.WriteStop(); err != nil {
return err
}
fw.Close()
我得到的唯一错误是“运行时错误:无效的内存地址或 nil 指针取消引用”。通过在“if”语句中打印语句,我发现无效的内存地址来自“pw.WriteStop()”
附上错误截图;只是为了表明我真的只得到“运行时错误:无效的内存地址或零指针取消引用”
【问题讨论】:
-
堆栈的完整错误应该显示错误发生的位置。将堆栈添加到您的帖子中。
-
运行时报告发生恐慌的代码行。编辑问题以显示该行代码。
-
我得到的唯一错误是这个“运行时错误:无效的内存地址或零指针取消引用”,通过在“if”语句中打印语句我发现无效的内存地址来自“pw.写停止”
-
@jackysatpal 运行时错误又名恐慌也打印堆栈跟踪,这就是上面的 cmets 所说的,该跟踪可用于查找导致问题的代码。
-
@jackysatpal 参见这里的例子:play.golang.com/p/oseauSuhEMV
panic: runtime error: invalid memory address or nil pointer dereference之后的所有文本都是堆栈跟踪,你能看到它是如何提到问题的文件和行的吗?即../prog.go:12?将堆栈跟踪添加到问题中,或者自己使用它来跟踪问题。