【发布时间】:2015-03-03 14:15:35
【问题描述】:
return_code swap_int_buffer(int* buffer, int size, int index1, int index2) {
if(index1 <0 || index2<0){
return INVALID_ARGUMENT_NEGATIVE;
} else if(index1 > size || index2 >size){
return INVALID_INDEX_OUT_OF_BOUNDS;
}else{
int *bucket;
int i;
int j;
bucket = (int*)malloc(sizeof(int)*size);
for(i = size - 1, j = 0; i>=0; i--, j++){
*(bucket+j) = *(buffer+i);
}
for(i=0; i<size; i++){
*(buffer+i) = *(bucket+i);
}
return SUCCESS;
}
return NOT_IMPLEMENTED;
}
我不明白为什么当我测试这段代码时它不能正常工作,测试是由我的大学提供的,该函数旨在反转一个 int 数组。我错过了什么吗?感谢您的帮助:)
【问题讨论】:
-
在调试器中运行并逐行执行代码。和don't cast the result of
mallocin C。然后记住,例如*(buffer + i)等价于buffer[i](对许多人来说更容易阅读,而要少写一个字符 :)。您是否有理由不使用例如memcpy复制内存? -
你能解释一下你期望这个函数应该做什么,以及它现在做什么?
-
@JoachimPileborg 我对 C 很陌生,所以我不知道很多库函数,memcpy 是做什么的?
-
@CallumSangray ,谷歌它。从它的名字看,它复制了内存。
-
@Callum Sangray 该函数存在内存泄漏。我认为您必须在不分配额外内存的情况下将数组反转到位。如果函数接受开始和结束索引,那么传递数组的大小也没有任何意义。