我是一个新的 C 程序员,指针 + 数组让我很困惑。我没有收到任何错误并且代码运行良好......直到中间的某个地方代码开始起作用,因为数组中的某些元素被设置为我想要的其他东西。我想知道是否有一个程序可以在代码运行完成后将其内存可视化?
例如,在我运行之后:
#include<stdio.h>
int main(){
int array[2] = {0,1};
array[1] = 4;
printf("%d\n",array[1]);
}
它将显示一块内存,其中数组有两个元素,分别为 0 和 4 。
现在为了避免遇到数组包含先前操作中的元素的问题,我通过执行以下操作清除该数组的内存:
memset(tokenized,0,MAX_CHARS);
它似乎有效,但我不知道它是否真的在做我认为它在后端做的事情。
编辑:我现在正在使用 Valgrind,我只想知道,我怎么知道错误指的是哪一行?例如我得到了这个:
==24394== Source and destination overlap in strncpy(0x7ff000006, 0x7ff000006, 6)
==24394== at 0x4C2C236: strncpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24394== by 0x400D8A: tokenize_quotes (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394== by 0x40184E: main (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394==
==24394== Conditional jump or move depends on uninitialised value(s)
==24394== at 0x4C2C007: strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24394== by 0x400E06: tokenize_quotes (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394== by 0x40184E: main (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394==
但我不知道错误在哪一行?我知道它的一些关于 strcpy 谢谢!