C++ 如何知道两个C字符串是否指向一个内存块?

C++ 如何知道两个C字符串是否指向一个内存块?,c++,c,string,malloc,strlen,C++,C,String,Malloc,Strlen,我使用malloc分配了一个数组: char *aStr1 = (char* ) malloc (10); 然后我填满了这段记忆: strcpy(aStr1, "ABCDEFGHI"); 之后,我创建了一个新指针ast2: char *aStr2 = aStr1 + 5; 我将内存的第四个元素设置为“\0”: *(1+4)='\0' 最后,在一个简单函数中使用这两个指针: int checkMem(char *aStr1, char *aStr2); 如果aStr1和aStr2指向一个内

我使用malloc分配了一个数组:

char *aStr1 = (char* ) malloc (10);
然后我填满了这段记忆:

strcpy(aStr1, "ABCDEFGHI");
之后,我创建了一个新指针ast2:

char *aStr2 = aStr1 + 5;
我将内存的第四个元素设置为“\0”:

*(1+4)='\0'

最后,在一个简单函数中使用这两个指针:

int checkMem(char *aStr1, char *aStr2);
如果aStr1和aStr2指向一个内存块,则此函数返回true(某些非零值),而在另一种情况下返回零

如何实现此功能?(我读了很多关于allocs函数的linux操作系统手册,但没有找到任何关于此类问题的信息)

//添加了

我需要这样做:

char *aStr1 = (char *) malloc (10);
char *aStr2 = aStr1 + 5;
strcpy(aStr1, "ABCDEFGHI");
*(aStr1 + 4) = '\0';
除此之外:

my_strcat(aStr1, aStr2);
我不要求帮助实现我的strcat,但是也许,我可以得到一些关于如何解决其问题的提示

//已更新

谢谢你。我解决了

如果没有任何低级功能,您无法正确知道分配了多少内存(可能在某些平台或实现上,您可以这样做:

size_t ptr_size = *((size_t *)ptr - 1);
但也许并非所有人都认为这是正确的)


解决方法很简单:我创建aSrc2的本地副本,然后realloc aSrc1并将aSrc2复制到新的aSrc1。

不幸的是,您无法判断两个指针是否指向属于相同初始分配的内存

您可以创建类/结构,例如,保存初始分配,然后进行比较


但是如果没有添加信息,您就无法分辨。

不幸的是,您无法分辨两个指针是否指向属于相同初始分配的内存

您可以创建类/结构,例如,保存初始分配,然后进行比较


但是如果没有添加信息,您就无法判断。

没有提供标准的机制来执行此操作,由您来跟踪收到的内存以及这些分配的大小,因此您可能希望提供自己的malloc包装器来跟踪分配的内容。将指针存储在映射中,这样您就可以使用lower_bound查找与第一个字符串最近的分配,然后检查第二个字符串是否在相同的分配中。

没有提供标准的机制来执行此操作,由您跟踪收到的内存以及这些分配的大小,因此,您可能希望提供自己的malloc包装器来跟踪所分配的内容。将指针存储在映射中,这样您就可以使用lower_bound查找与第一个字符串最近的分配,然后检查第二个字符串是否在同一分配中。

在此上下文中定义“内存块”。如果您只想确定两个字符串在内存中是否端对端,比较一个字符串中空终止符的地址与另一个字符串的起始地址。粗略猜测,您想知道是否可以在第二个指针上调用
free
?@Quirliom“Memory Block”-通过调用某个分配函数分配的内存。相关:and(后者具有更多链接)在此上下文中定义“内存块”。如果您只想确定两个字符串在内存中是否端到端,请将一个字符串中空终止符的地址与另一个字符串的起始地址进行比较。随意猜测,你想知道你是否可以在第二个指针上调用
free
?@Quirliom“Memory Block”-通过调用某个分配函数分配的内存。相关:和(后者有更多链接),如果我将内存重新分配到更小的大小,这会破坏aStr2数据吗?还是它未定义的行为?(也许我的意思是:如果我修剪内存,指针会移动到另一个地方吗?)如果你真的锁定或对指针A做任何事情,指针B就无法知道或自动移动。如果我将内存重新分配到更小的大小,这会破坏aStr2数据吗?还是它未定义的行为?(也许我的意思是:如果我修剪内存,指针会移动到另一个地方吗?)如果你真的锁定或对指针A做任何事情,指针B就无法知道或自动移动。您遇到未定义的行为时,很有可能出现数据中断和崩溃