我创建了以下测试程序:
#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
请注意,我没有收到“无法重新分配”或“无法分配”消息。
那么它为什么会崩溃呢?