Sam*_*rch 3 c string memory-management
我试图区分文字字符串与分配的字符串,所以我不小心尝试free()文字字符串,这将导致段错误.
我可能尝试free()文字字符串的原因涉及一个可以嵌入的strcat()包装器: strcatex("My name ", strcatex("is ", strMyName));
无论原因如何,请考虑:
void* mallocex(int intBytes)
{
void* newPtr;
newPtr = malloc(intBytes);
if(newPtr == 0)
return 0;
else if(newPtr > maxPointer)
maxPointer = newPtr;
return newPtr;
}
Run Code Online (Sandbox Code Playgroud)
和
int SafeFree(void **ptr)
{
if((unsigned long) ptr > (unsigned long) maxPointer)
return 0;
else
free(*ptr);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
示例使用:
char *newString;
newString = (char*) mallocex(12);
strcpy(newString, "Example one");
SafeFree(&newString);
SafeFree("Example two");
Run Code Online (Sandbox Code Playgroud)
无论我的堆有多大,这总能工作吗?
没有这样的保证不依赖它.
字符串文字在只读实现定义区域的某处分配内存,无法以可移植的方式知道它将是什么,因此您不应对其做出任何假设.