**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
16小时前就关门了。
Improve this question
[valgrind消息]
==16958== 1 errors in context 1 of 2:
==16958== Invalid read of size 4
==16958== at 0x109637: arr_del (in /home/students/s/smelov.vp/lab3/lab3)
==16958== by 0x10939D: main (in /home/students/s/smelov.vp/lab3/lab3)
==16958== Address 0x4a19938 is 0 bytes after a block of size 24 alloc'd
==16958== at 0x483E7CF: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==16958== by 0x109541: arr_corr (in /home/students/s/smelov.vp/lab3/lab3)
==16958== by 0x109323: main (in /home/students/s/smelov.vp/lab3/lab3)
[功能代码]
int main(){
int input=0;
int *arr;
int s;
size_t index;
scanf("%d", &input);
switch(input){
case 2:
scanf("%zu", &index);
arr = arr_corr(arr, index, &s);
arr_output(arr, s);
break;
case 3:
scanf("%zu", &index);
arr = arr_del(arr, index, &s);
arr_output(arr, s);
break;
}
}
int* arr_corr(int *arr, size_t index, int *s){
int n;
(*s) = (*s)+1;
arr = (int*) realloc(arr, (size_t)(*s) * sizeof(int));
for(size_t i = (size_t)((*s)-1); i>=index; i--){
arr[i+1] = arr[i];
}
scanf("%d", &n);
arr[index]= n;
return arr;
}
int* arr_del(int *arr, size_t index, int *s){
for(size_t i=index; i<(size_t)(*s); i++){
arr[i]=arr[i+1];
}
(*s)=(*s)-1;
arr = (int*) realloc (arr, (size_t)(*s) * sizeof(int));
return arr;
}
我只是不明白这条信息是什么意思,我做错了什么。请帮帮我!我所知道的一切就是main()函数和其他任何东西都没有问题。代码位于两个文件中。链接这些文件也没有问题。
1条答案
按热度按时间6za6bjd01#
您重新分配了大小为24字节(6
int
s)的内容。您试图读取超出该内存末尾的内容(字节25到27,或索引为6的int数组)。
如果使用调试信息(-g)编译代码,则会更清楚。
为了解决这个问题,你要么需要分配更多的内存,要么做一些事情,比如改变你的循环控制,这样你就可以更快地停止,不要读得太远。