我正在尝试创建一个对动态字符串执行某些操作的程序。下一个方法应该将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;
}
答案 0 :(得分:1)
尝试使用:)
MyString *newMyString = (MyString*) malloc( sizeof( struct MyString ) );
而不是
MyString *newMyString = (MyString*) malloc(0);
^^^^
根据C标准(7.22.3内存管理功能)
如果请求的空间大小为零,则行为为 implementation-defined:返回空指针,或者 行为就像大小是一些非零值,除了 返回的指针不得用于访问对象。
在您的代码段中,程序两次尝试使用指针访问该对象。本声明中的第一次
newMyString->myString = "";
和本声明中的第二次
newMyString = (MyString*) realloc(newMyString, 4);
尝试复制原始对象时。