gpt4 book ai didi

c - C 中奇怪的内存问题

转载 作者:行者123 更新时间:2023-11-30 19:44:43 26 4
gpt4 key购买 nike

我在 C 语言中遇到了一个非常奇怪的问题。

这是我的功能:

void array_insert_range(void* dest[], const void* source[], unsigned int index, size_t length_dest, const size_t length_source)
{
dest = (void**)realloc(dest, (length_dest+length_source) * sizeof(void*));
for(unsigned int j = 0; j < length_source; j++)
{
for(unsigned int i = length_dest+length_source-1; i >= index; i--)
{
dest[i+1] = dest[i];
}
}
for(unsigned int i = index; i<index+length_source; i++)
{
dest[i] = source[i-index];
}
}

这是我为其编写的一些测试用例:

int* arr = array_create(7, sizeof(int));
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
arr[5] = 6;
arr[6] = 7;
int* arr2 = array_create(4, sizeof(int));
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
arr2[3] = 4;
array_insert_range(arr, arr2, 3, 7, 4);

这应该导致 arr 成为一个包含元素 {1,2,3,1,2,3,4,4,5,6,7} 的数组>.

我正在将 Code::Blocks 13.12 与 GCC 4.8.1 和 GDB 7.6.1 一起使用。当我使用调试器运行我的项目时,代码运行得很好。但是,如果我正常编译并运行,该数组包含一些奇怪的值,例如 {9472560,7988328,3,4,5,6,7,-1,888981658,134220576,9443152} .

我尝试在程序中的不同点打印值,看起来数组 destarray_insert_range 方法的末尾很好,只有奇数值出现在测试用例方法中。

如果您能帮助解决此问题,我将不胜感激。

最佳答案

函数array_insert_range将void指针作为第一个和第二个参数:在参数声明中,void* dest[]相当于void**目标。当您在测试用例中调用此函数时,您的编译器必须对此进行提示。

所以正确的做法是使用arr1的地址调用array_insert_range:

array_insert_range(&arr1, arr2, 3, 7, 4);

此外,您需要更改此函数的声明才能获取arr1的地址:

void array_insert_range(void** dest[], const void* source[], unsigned int index, size_t length_dest, const size_t length_source);

然后,在该函数的代码中,使用 *dest 而不是 dest

关于c - C 中奇怪的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com