[英]How to know if two C-strings point to one memory block?
我有一個分配了malloc的數組:
char *aStr1 = (char* ) malloc (10);
然后我填滿了這段記憶:
strcpy(aStr1, "ABCDEFGHI");
之后,我創建了一個新的指針aStr2:
char *aStr2 = aStr1 + 5;
我將內存的第四個元素設置為“ \\ 0”:
*(aStr1 + 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);
我不尋求幫助來實現my_strcat,但也許可以得到一些提示,說明我如何解決其問題
//更新
感謝所有人。 我解決了
沒有任何底層函數,您將無法正確知道多少內存分配(也許在某些平台或實現上,您可以這樣做:
size_t ptr_size = *((size_t *)ptr - 1);
但可能並非全部正確)。
解決方法很簡單:我創建aSrc2的本地副本,然后重新分配aSrc1並將aSrc2復制到新的aSrc1。
不幸的是,您無法確定兩個指針是否指向屬於同一初始分配的內存。
您可以創建類/結構,例如,保存初始分配,然后可以對其進行比較。
但是,如果沒有附加信息,您將無法分辨。
沒有提供執行此操作的標准機制,它由您來跟蹤收到的內存以及這些分配的大小,因此您可能希望提供自己的malloc包裝器來跟蹤分配的內容。 將指針存儲在映射中,以便您可以使用lower_bound查找與第一個字符串最近的分配,然后檢查第二個字符串是否在同一分配中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.