我有一個函數返回一個數據字,我需要把它放在一個結構體中;然而,當我操縱任何指針時,我不在正確的邊界上。操作指向任意位置的指針
這可能是我更容易顯示:
void grab_object(size_t copies, struct iovec *iov)
{
union u {
long val;
char chars[WORD_SIZE];
}data;
iov = malloc(sizeof(struct iovec) * copies);
size_t numWords = (sizeof(struct iovec) * copies)/WORD_SIZE;
if(DEBUG)
{
printf("numWords %zx\n", numWords);
printf("size of word %zx\n", WORD_SIZE);
}
size_t x = 0;
for(x = 0; x < copies; x++)
{
size_t i = 0;
struct iovec *laddr = iov;
while(i <= numWords)
{
data.val = function()
memcpy(laddr, data.chars, WORD_SIZE);
laddr += WORD_SIZE;
i++;
}
size_t remainder = size % (WORD_SIZE);
if(remainder != 0)
{
data.val = function();
memcpy(laddr, data.chars, remainder);
}
}
}
這將數據複製到結構的第一個元素;然而,它不在第二。
當我打印的元素的地址和LADDR我得到類似如下的內容:在之間
iov_len loc: 0x9a5148
starting laddr: 0x9a5140
after incrementing laddr: 0x9a5150
iov_len loc: 0x9a5148
starting laddr: 0x9a5150
after incrementing laddr: 0x9a5160
那麼爲什麼LADDR遞增的,而不是由1通過0x10的,我怎麼會複製」 「數據(iov_len
)?
該代碼似乎無限遞歸 - 它以'void function()'開始,並且在for()'循環的第一行中有'_U.val = function();' - 哪些調用'function()',它啓動另一個調用'function()'的for()'循環。 –
您需要發佈實際編譯的完整代碼集。請參見[最小完整可驗證示例](http://stackoverflow.com/help/mcve)。 – user3386109
@ user3386109已更新 – SailorCire