【发布时间】:2021-07-30 16:40:53
【问题描述】:
首先,我不知道堆内存是否以连续的方式使用,这样做... while 循环,其次,当我尝试打印存储在数组中的字符串时,我得到的是 NULL 值而不是实际值字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable : 4996)
int main() {
int counter = 0;
char** tab;
do {
tab = (char**)malloc(3 * sizeof(char));
tab[counter] = (char*)malloc(256 * sizeof(char));
fgets(*(tab + counter), 256, stdin);
++counter;
} while (counter < 3);
printf("%s", tab[0]);
}
【问题讨论】:
-
除非你在一个非常奇怪的硬件架构上运行:访问对象边界之外的未定义行为。
-
我正在使用在线 GCC 编译器
-
您有大量内存泄漏。不仅来自字符串本身,还因为您在循环内为
tab本身分配内存,丢弃了最后的分配(以及您刚刚读取的字符串)。 -
至于你的问题,仔细看
tab = (char**)malloc(3 * sizeof(char));的声明。您确定要为指针分配三个字节吗? -
哦...好吧,这就是问题所在。谢谢楼主:)