【发布时间】:2013-08-25 22:04:27
【问题描述】:
我创建了以下测试程序:
#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
请注意,我没有收到“无法重新分配”或“无法分配”消息。
那么为什么会崩溃呢?
【问题讨论】:
-
你在哪里增加“messageCount”?
-
所以我知道我有多少条消息,从而知道要分配多少内存?
-
我的意思是你在尝试写入基于其值分配的内存之后,而不是之前......但我看到你已经接受了指出这一点的答案。
-
啊,对不起,我以为你说“你为什么……”
标签: c pointers memory dynamic allocation