c - Valgrind 在二维数组中读取 1 的大小无效

标签 c memory-management size valgrind

我对 valgrind 和 C 都很陌生,并且无法准确解释我的代码出了什么问题。我在第 285 行得到无效的读取大小 1,它表示在分配 5 个 block 后地址为 0 字节。我的分配如下:

output = malloc(sizeof(char**));
output[0] = malloc(sizeof(char*)*size);
for(i = 0; i < size; i++){
    output[0][i] = malloc(wordLength);
}

无效的读取大小和周围的行是:

for(j = 0; j < size; j++){
    printf("%s, ", output[0][j]);
    free(output[0][j]);
}

我没有在代码中的其他任何地方释放这些数据,所以我不确定出了什么问题。另外,输出中实际上不止一个二维数组,但我认为没有必要深入探讨这一点,因为此错误似乎源于这一特定情况。

最佳答案

单词被放入这个数据结构的哪里? %s 指令将读取字符,直到遇到 \0 空终止符。因此,如果该单词比分配的内存块长一个字符,则 printf 行将读取超出末尾的一个字节。

关于c - Valgrind 在二维数组中读取 1 的大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851463/

相关文章:

c - 在一次传递中从字符串解析 int 的算法

c - 读取 wav 文件,持续时间/数据大小的计算总是错误的

objective-c - 带有 CommonCrypto 的 AES 使用太多内存 - Objective-C

python - Python进程使用的总内存?

c - 如何返回复合文字结构

c - 用于将 rtspsrc 的名称元素与音频和视频队列链接的 Gstreamer 应用程序

cocoa - Cocoa 中的单例和内存管理

时间:2019-03-17 标签:c#richtextboxoutofmemory

python - NumPy 相当于 MATLAB size()

swift - 更改 TabView 中的 sf 符号重量/大小