【发布时间】:2015-11-04 00:21:30
【问题描述】:
我正在尝试创建一个对动态字符串执行某些操作的程序。下一个方法应该将 myString 设置为空字符串。
每当我尝试使用字符串对结构进行 realloc() 时(就像在仅为演示目的添加的代码行中一样)它会导致错误:
0000000000541E80 处的堆块在 0000000000541E91 处修改,请求大小为 1。
导致问题的原因是什么?我几周前才开始学习 C,所以请不要使用高级术语。
struct _MyString
{
char* myString;
};
MyString * myStringAlloc()
{
MyString *newMyString = (MyString*) malloc(0);
if(newMyString == NULL)
{
return NULL;
}
newMyString->myString = "";
newMyString = (MyString*) realloc(newMyString, 4);
//some more code
return newMyString;
}
【问题讨论】:
-
标准警告:不要像
malloc和朋友返回的那样投射void *。 C 不是 C++! -
这个问题不是重复的,因为问题不在于 char* 的 malloc(0) 问题,而是他未能为整个结构正确分配空间。还有一个问题,当他应该只重新分配指向 char* 成员的指针时,他正在为整个结构重新分配空间
-
@dbenson 据我所知,问题开始与
malloc(0)返回一个非NULL 值和取消引用...... -
@SouravGhosh 我花时间输入了一个更完整的答案,我觉得实际上解决了 OP 对指针和分配的误解,而链接的帖子中没有提到。
-
@SouravGhosh 那么你有没有机会重新讨论这个问题?
标签: c dynamic char malloc realloc