gpt4 book ai didi

c - 动态分配char指针指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:46 25 4
gpt4 key购买 nike

我创建了以下测试程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char **messages = NULL;
int messageCount = 0;

void addMessage(char *message) {
messages = realloc(messages, messageCount * sizeof(char *));
if(messages == NULL) {
printf("Unable to realloc");
return;
}
messages[messageCount] = malloc(255 * sizeof(char));
if(messages[messageCount] == NULL) {
printf("Unable to alloc");
return;
}
memset(messages[messageCount], '\0', 255);
strncpy(messages[messageCount], message, 255);
messageCount++;
}

void listMessages(void) {
if(messageCount == 0) return;
int i = 0;
for(i = 0; i < messageCount; i++) {
printf("%s\n", messages[i]);
}
printf("\n");
}

int main(void) {
addMessage("This");
listMessages();
addMessage("is");
listMessages();
addMessage("a");
listMessages();
addMessage("test");
listMessages();
addMessage("for");
listMessages();
addMessage("dynamic");
listMessages();
addMessage("memory");
listMessages();
addMessage("allocation");
listMessages();
}

对于我正在尝试做的事情,这是非常不言自明的。

程序崩溃前我得到以下输出:

This

This
is

This
is
a

This
is

请注意,我没有收到“无法重新分配”或“无法分配”消息。

为什么会崩溃?

最佳答案

这是您的代码正在执行的操作:

  1. 使用“This”调用 addMessage
  2. 使用 messageCount = 0 调用此函数:messages = realloc(messages, messageCount * sizeof(char *));

然后不断写入未分配的内存。

因此,在 addMessage 的顶部执行一个 ++messageCount;,您可以将其从函数底部移除。

关于c - 动态分配char指针指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com